Xamarin Android および iOS の Visual Basic
サンプル アプリケーションでは、.NET Standard ライブラリにコンパイルされた Visual Basic コードを Xamarin で使用する方法を示します。 Android および iOS で実行されている結果のアプリのスクリーンショットを次に示します:
この例の Android および iOS プロジェクトはすべて C# で記述されています。 各アプリケーションのユーザー インターフェイスはネイティブ テクノロジを使用して構築されますが、TodoItem
管理は (完全なデータベースではなく、デモンストレーション目的で) XML ファイルを使用して Visual Basic .NET Standard ライブラリによって提供されます。
サンプルのチュートリアル
このガイドでは、iOS および Android 用の TaskyVB Xamarin サンプルで Visual Basic がどのように実装されているかについて説明します。
Note
このガイドに進む前に、Visual Basic と .NET Standard の手順を確認してください。
「Visual Basic を使用した Xamarin.Forms」の手順を参照して、共有ユーザー インターフェイスの Visual Basic コードを使用してアプリをビルドする方法を確認してください。
VisualBasicNetStandard
Visual Basic .NET Standard ライブラリは、Windows 上の Visual Studio でのみ作成できます。 サンプル ライブラリには、次の Visual Basic ファイルのアプリケーションの基本が含まれています:
- TodoItem.vb
- TodoItemManager.vb
- TodoItemRepositoryXML.vb
- XmlStorage.vb
TodoItem.vb
このクラスには、アプリケーション全体で使用されるビジネス オブジェクトが含まれています。 これは Visual Basic で定義され、C# で記述された Android および iOS プロジェクトと共有されます。
クラス定義を次に示します:
Public Class TodoItem
Property ID() As Integer
Property Name() As String
Property Notes() As String
Property Done() As Boolean
End Class
このサンプルでは、XML シリアル化とシリアル化解除を使用して、TodoItem オブジェクトを読み込んで保存します。
TodoItemManager.vb
Manager クラスは、移植可能なコードの ‘API’ を提示します。 TodoItem
クラスには基本的な CRUD 操作が用意されていますが、これらの操作は実装されません。
Public Class TodoItemManager
Private _repository As TodoItemRepositoryXML
Public Sub New(filename As String)
_repository = New TodoItemRepositoryXML(filename, storage)
End Sub
Public Function GetTask(id As Integer) As TodoItem
Return _repository.GetTask(id)
End Function
Public Function GetTasks() As List(Of TodoItem)
Return New List(Of TodoItem)(_repository.GetTasks())
End Function
Public Function SaveTask(item As TodoItem) As Integer
Return _repository.SaveTask(item)
End Function
Public Function DeleteTask(item As TodoItem) As Integer
Return _repository.DeleteTask(item.ID)
End Function
End Class
コンストラクターは、IXmlStorage のインスタンスをパラメーターとして受け取ります。 これにより、各プラットフォームは独自の動作実装を提供しながら、移植可能なコードで共有できる他の機能を記述できます。
TodoItemRepository.vb
リポジトリ クラスには、TodoItem オブジェクトのリストを管理するためのロジックが含まれています。 完全なコードを次に示します。TodoItems 全体で一意の ID 値がコレクションに追加および削除されるときに、一意の ID 値を管理するロジックが主にに存在します。
Public Class TodoItemRepositoryXML
Private _filename As String
Private _storage As IXmlStorage
Private _tasks As List(Of TodoItem)
''' <summary>Constructor</summary>
Public Sub New(filename As String)
_filename = filename
_storage = New XmlStorage
_tasks = _storage.ReadXml(filename)
End Sub
''' <summary>Inefficient search for a Task by ID</summary>
Public Function GetTask(id As Integer) As TodoItem
For t As Integer = 0 To _tasks.Count - 1
If _tasks(t).ID = id Then
Return _tasks(t)
End If
Next
Return New TodoItem() With {.ID = id}
End Function
''' <summary>List all the Tasks</summary>
Public Function GetTasks() As IEnumerable(Of TodoItem)
Return _tasks
End Function
''' <summary>Save a Task to the Xml file
''' Calculates the ID as the max of existing IDs</summary>
Public Function SaveTask(item As TodoItem) As Integer
Dim max As Integer = 0
If _tasks.Count > 0 Then
max = _tasks.Max(Function(t As TodoItem) t.ID)
End If
If item.ID = 0 Then
item.ID = ++max
_tasks.Add(item)
Else
Dim j = _tasks.Where(Function(t) t.ID = item.ID).First()
j = item
End If
_storage.WriteXml(_tasks, _filename)
Return max
End Function
''' <summary>Removes the task from the XMl file</summary>
Public Function DeleteTask(id As Integer) As Integer
For t As Integer = 0 To _tasks.Count - 1
If _tasks(t).ID = id Then
_tasks.RemoveAt(t)
_storage.WriteXml(_tasks, _filename)
Return 1
End If
Next
Return -1
End Function
End Class
Note
このコードは、非常に基本的なデータ ストレージ メカニズムの例です。 プラットフォーム固有の機能 (この場合は XML ファイルの読み込みと保存) にアクセスするために、.NET Standard ライブラリがインターフェイスに対してコーディングする方法を示すために提供されています。 これは、運用品質のデータベースの代替手段を意図したものではありません。
Android および iOS アプリケーション プロジェクト
iOS
iOS アプリケーションでは、このコード スニペットに示すように、AppDelegate.cs ファイルに TodoItemManager
と XmlStorageImplementation
が作成されます。 最初の 4 行は、データが格納されるファイルへのパスを構築するだけです。最後の 2 行は、インスタンスが作成されている 2 つのクラスを示しています。
var xmlFilename = "TodoList.xml";
string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); // Documents folder
string libraryPath = Path.Combine(documentsPath, "..", "Library"); // Library folder
var path = Path.Combine(libraryPath, xmlFilename);
TaskMgr = new TodoItemManager(path);
Android
Android アプリケーションでは、このコード スニペットに示すように、Application.cs ファイルに TodoItemManager
と XmlStorageImplementation
が作成されます。 最初の 3 行は、データが格納されるファイルへのパスを構築するだけです。最後の 2 行は、インスタンスが作成されている 2 つのクラスを示しています。
var xmlFilename = "TodoList.xml";
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = Path.Combine(libraryPath, xmlFilename);
TaskMgr = new TodoItemManager(path);
アプリケーション コードの残りの部分は、主にユーザー インターフェイスと、TaskMgr
クラスを使用して TodoItem
クラスを読み込んで保存することです。
Visual Studio 2019 for Mac
警告
Visual Studio for Mac では、Visual Basic 言語の編集はサポートされていません。Visual Basic プロジェクトまたはファイルを作成するためのメニュー項目はありません。 .vb を開くと、言語構文の強調表示、オートコンプリート、IntelliSense はありません。
Visual Studio 2019 for Mac では、Windows で作成された Visual Studio .NET Standard プロジェクトをコンパイルできるため、iOS アプリはこれらのプロジェクトを参照できます。
Visual Studio 2017 では、Visual Basic プロジェクトをまったくビルドできません。
まとめ
この記事では、Visual Studio ライブラリと .NET Standard ライブラリを使用して Xamarin アプリケーションで Visual Basic コードを使用する方法について説明しました。 Xamarin は Visual Basic を直接サポートしていませんが、Visual Basic を .NET Standard ライブラリにコンパイルすると、Visual Basic で記述されたコードを iOS および Android アプリに含めることもできます。