Visual Basic v Xamarin Androidu a iOSu
Ukázková aplikace ukazuje, jak lze s Xamarinem použít kód jazyka Visual Basic zkompilovaný do knihovny .NET Standard. Tady je několik snímků obrazovky s výslednými aplikacemi běžícími na Androidu a iOSu:
Projekty androidu a iOSu v příkladu jsou napsané v jazyce C#. Uživatelské rozhraní pro každou aplikaci je sestaveno pomocí nativních technologií, zatímco TodoItem
správa je poskytována knihovnou Visual Basic .NET Standard pomocí souboru XML (pro demonstrační účely, nikoli úplnou databázi).
Ukázkový názorný postup
Tato příručka popisuje, jak je Visual Basic implementován v ukázce Xamarinu TaskyVB pro iOS a Android.
Poznámka:
Než budete pokračovat v této příručce, přečtěte si pokyny k jazyku Visual Basic a .NET Standard .
Informace o vytvoření aplikace se sdíleným uživatelským rozhraním v jazyce Visual Basic najdete v pokynech pro Xamarin.Forms.
VisualBasicNetStandard
Knihovny .NET Standard jazyka Visual Basic lze vytvářet pouze v sadě Visual Studio ve Windows. Ukázková knihovna obsahuje základy naší aplikace v těchto souborech jazyka Visual Basic:
- TodoItem.vb
- TodoItemManager.vb
- TodoItemRepositoryXML.vb
- XmlStorage.vb
TodoItem.vb
Tato třída obsahuje obchodní objekt, který se má použít v celé aplikaci. Definuje se v jazyce Visual Basic a bude sdílen s projekty Androidu a iOS napsanými v jazyce C#.
Definice třídy je zde uvedená:
Public Class TodoItem
Property ID() As Integer
Property Name() As String
Property Notes() As String
Property Done() As Boolean
End Class
Ukázka používá serializaci XML a de-serializace k načtení a uložení todoItem objekty.
TodoItemManager.vb
Třída Manager představuje rozhraní API pro přenosný kód. Poskytuje základní operace CRUD pro TodoItem
třídu, ale žádná implementace těchto operací.
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
Konstruktor přebírá instanci IXmlStorage jako parametr. To umožňuje každé platformě poskytovat vlastní funkční implementaci a přitom nechat přenosný kód popsat další funkce, které je možné sdílet.
TodoItemRepository.vb
Třída úložiště obsahuje logiku pro správu seznamu objektů TodoItem. Kompletní kód je uvedený níže – logika existuje hlavně pro správu jedinečné hodnoty ID v rámci todoItems při jejich přidání a odebrání z kolekce.
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
Poznámka:
Tento kód je příkladem velmi základního mechanismu úložiště dat. Poskytuje se k předvedení, jak může knihovna .NET Standard kódovat proti rozhraní pro přístup k funkcím specifických pro platformu (v tomto případě načítání a ukládání souboru XML). Nejedná se o alternativu databáze v produkční kvalitě.
Projekty aplikací pro Android a iOS
iOS
V aplikaci pro iOS se TodoItemManager
vytvoří v XmlStorageImplementation
souboru AppDelegate.cs , jak je znázorněno v tomto fragmentu kódu. První čtyři řádky právě vytvářejí cestu k souboru, kde budou uložena data; poslední dva řádky ukazují, že se vytvoří instance dvou tříd.
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
V aplikaci pro Android se TodoItemManager
vytvoří v XmlStorageImplementation
souboru Application.cs , jak je znázorněno v tomto fragmentu kódu. První tři řádky právě vytvářejí cestu k souboru, kde budou uložena data; poslední dva řádky ukazují, že se vytvoří instance dvou tříd.
var xmlFilename = "TodoList.xml";
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = Path.Combine(libraryPath, xmlFilename);
TaskMgr = new TodoItemManager(path);
Zbytek kódu aplikace se primárně zabývá uživatelským rozhraním a používá TaskMgr
třídu k načtení a ukládání TodoItem
tříd.
Visual Studio 2019 pro Mac
Upozorňující
Visual Studio pro Mac nepodporuje úpravy jazyka Visual Basic – nejsou k dispozici žádné položky nabídky pro vytváření projektů nebo souborů jazyka Visual Basic. Pokud otevřete .vb není zvýraznění syntaxe jazyka, automatické dokončování ani IntelliSense.
Visual Studio 2019 pro Mac může kompilovat projekty visual Studio .NET Standard vytvořené ve Windows, aby na tyto projekty mohly odkazovat aplikace pro iOS.
Visual Studio 2017 nemůže vůbec vytvářet projekty jazyka Visual Basic.
Shrnutí
Tento článek ukázal, jak využívat kód jazyka Visual Basic v aplikacích Xamarin pomocí knihoven sady Visual Studio a .NET Standard. I když Xamarin přímo nepodporuje Visual Basic, kompilace jazyka Visual Basic do knihovny .NET Standard umožňuje zahrnout kód napsaný pomocí jazyka Visual Basic do aplikací pro iOS a Android.