Xamarin Android 和 iOS 中的 Visual Basic
範例應用程式示範如何搭配 Xamarin 使用 Visual Basic 程式代碼編譯成 .NET Standard 連結庫。 以下是在 Android 和 iOS 執行之結果應用程式的一些螢幕快照:
範例中的 Android 和 iOS 專案全都以 C# 撰寫。 每個應用程式的使用者介面都是使用原生技術所建置,而 TodoItem
管理是由Visual Basic.NET Standard 連結庫使用 XML 檔案提供(基於示範目的,而非完整資料庫)。
範例逐步解說
本指南討論如何在 iOS 和 Android 的 TaskyVB Xamarin 範例中實作 Visual Basic。
注意
請先檢閱 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
- Xml 儲存體.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』。 它提供 類別的基本 CRUD 作業 TodoItem
,但不會實作這些作業。
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
建構函式會採用IXml的實例 儲存體 做為參數。 這可讓每個平臺提供自己的工作實作,同時仍讓可攜式程式代碼描述可共用的其他功能。
TodoItemRepository.vb
存放庫類別包含管理 TodoItem 物件清單的邏輯。 以下顯示完整的程序代碼 – 邏輯主要是為了管理 TodoItems 中唯一的標識符值,因為它們會從集合中新增和移除。
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
注意
此程式代碼是非常基本的數據儲存機制範例。 它提供來示範 .NET Standard 連結庫如何針對介面撰寫程式代碼,以存取平臺特定功能(在此案例中,載入和儲存 XML 檔案)。 它不打算是生產質量的資料庫替代方案。
Android 和 iOS 應用程式專案
iOS
在 iOS 應用程式中, TodoItemManager
和 XmlStorageImplementation
會在 AppDelegate.cs 檔案中建立,如此代碼段所示。 前四行只是建置將儲存數據之檔案的路徑;最後兩行顯示要具現化的兩個類別。
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應用程式中,TodoItemManager
和 XmlStorageImplementation
會在Application.cs檔案中建立,如此代碼段所示。 前三行只是建置將儲存數據之檔案的路徑;最後兩行顯示要具現化的兩個類別。
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 應用程式中。