Xamarin Android および iOS の Visual Basic

Download Sampleサンプルのダウンロード

TaskyVB サンプル アプリケーションでは、.NET Standard ライブラリにコンパイルされた Visual Basic コードを Xamarin で使用する方法を示します。 Android および iOS で実行されている結果のアプリのスクリーンショットを次に示します:

Android and iOS running an app built with Visual Basic

この例の 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 ファイルに TodoItemManagerXmlStorageImplementation が作成されます。 最初の 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 ファイルに TodoItemManagerXmlStorageImplementation が作成されます。 最初の 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 アプリに含めることもできます。