Visual Basic in Xamarin Android und iOS
Die Beispielanwendung veranschaulicht, wie Visual Basic-Code in einer .NET Standard-Bibliothek mit Xamarin kompiliert werden kann. Hier sind einige Screenshots der resultierenden Apps, die unter Android und iOS ausgeführt werden:
Die Android- und iOS-Projekte im Beispiel sind alle in C# geschrieben. Die Benutzeroberfläche für jede Anwendung wird mit systemeigenen Technologien erstellt, während die TodoItem
Verwaltung von der Visual Basic .NET Standard-Bibliothek mithilfe einer XML-Datei bereitgestellt wird (zu Demonstrationszwecken, keine vollständige Datenbank).
Exemplarische Vorgehensweise
In diesem Leitfaden wird erläutert, wie Visual Basic im TaskyVB Xamarin-Beispiel für iOS und Android implementiert wurde.
Hinweis
Lesen Sie die Anweisungen für Visual Basic und .NET Standard , bevor Sie mit diesem Handbuch fortfahren.
In den Visual Basic-Anweisungen für Xamarin.Forms finden Sie Informationen zum Erstellen einer App mit visual Basic-Code für die gemeinsame Benutzeroberfläche.
VisualBasicNetStandard
Visual Basic .NET Standard-Bibliotheken können nur in Visual Studio unter Windows erstellt werden. Die Beispielbibliothek enthält die Grundlagen unserer Anwendung in diesen Visual Basic-Dateien:
- TodoItem.vb
- TodoItemManager.vb
- TodoItemRepositoryXML.vb
- XmlStorage.vb
TodoItem.vb
Diese Klasse enthält das Geschäftsobjekt, das in der gesamten Anwendung verwendet werden soll. Sie wird in Visual Basic definiert und mit den Android- und iOS-Projekten geteilt, die in C# geschrieben wurden.
Die Klassendefinition wird hier gezeigt:
Public Class TodoItem
Property ID() As Integer
Property Name() As String
Property Notes() As String
Property Done() As Boolean
End Class
Im Beispiel wird die XML-Serialisierung und -De serialisierung verwendet, um die TodoItem-Objekte zu laden und zu speichern.
TodoItemManager.vb
Die Manager-Klasse stellt die 'API' für den portablen Code dar. Sie stellt grundlegende CRUD-Vorgänge für die TodoItem
Klasse bereit, aber keine Implementierung dieser Vorgänge.
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
Der Konstruktor verwendet eine Instanz von IXmlStorage als Parameter. Auf diese Weise kann jede Plattform eine eigene funktionierende Implementierung bereitstellen und gleichzeitig andere Funktionen beschreiben, die freigegeben werden können.
TodoItemRepository.vb
Die Repositoryklasse enthält die Logik zum Verwalten der Liste der TodoItem-Objekte. Der vollständige Code wird unten gezeigt – die Logik ist Standard weise vorhanden, um einen eindeutigen ID-Wert in den TodoItems zu verwalten, während sie hinzugefügt und aus der Auflistung entfernt werden.
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
Hinweis
Dieser Code ist ein Beispiel für einen sehr einfachen Datenspeichermechanismus. Es wird bereitgestellt, um zu veranschaulichen, wie eine .NET Standard-Bibliothek coden kann, um auf plattformspezifische Funktionen zuzugreifen (in diesem Fall wird eine XML-Datei geladen und gespeichert). Sie soll keine Alternative zur Produktionsqualität sein.
Android- und iOS-Anwendungsprojekte
iOS
In der iOS-Anwendung werden die TodoItemManager
und die XmlStorageImplementation
in der AppDelegate.cs-Datei erstellt, wie in diesem Codeausschnitt gezeigt. Die ersten vier Zeilen erstellen lediglich den Pfad zu der Datei, in der Daten gespeichert werden; in den letzten beiden Zeilen werden die beiden Klassen angezeigt, die instanziiert werden.
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
In der Android-Anwendung werden die TodoItemManager
und die XmlStorageImplementation
in der Application.cs Datei erstellt, wie in diesem Codeausschnitt dargestellt. Die ersten drei Zeilen erstellen lediglich den Pfad zu der Datei, in der Daten gespeichert werden; in den letzten beiden Zeilen werden die beiden Klassen angezeigt, die instanziiert werden.
var xmlFilename = "TodoList.xml";
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = Path.Combine(libraryPath, xmlFilename);
TaskMgr = new TodoItemManager(path);
Der Rest des Anwendungscodes befasst sich in erster Linie mit der Benutzeroberfläche und der Verwendung der TaskMgr
Klasse zum Laden und Speichern TodoItem
von Klassen.
Visual Studio 2019 für Mac
Warnung
Visual Studio für Mac die Bearbeitung der Visual Basic-Sprache nicht unterstützt – es gibt keine Menüelemente zum Erstellen von Visual Basic-Projekten oder -Dateien. Wenn Sie eine .vb es keine Sprachsyntax-Hervorhebung, AutoVervollständigen oder IntelliSense gibt.
Visual Studio 2019 für Mac kann Visual Studio .NET Standard-Projekte kompilieren, die unter Windows erstellt wurden, sodass iOS-Apps auf diese Projekte verweisen können.
Visual Studio 2017 kann keine Visual Basic-Projekte erstellen.
Zusammenfassung
In diesem Artikel wurde gezeigt, wie Visual Basic-Code in Xamarin-Anwendungen mit Visual Studio- und .NET Standard-Bibliotheken verwendet wird. Obwohl Xamarin Visual Basic nicht direkt unterstützt, ermöglicht das Kompilieren von Visual Basic in einer .NET Standard-Bibliothek code, der mit Visual Basic geschrieben wurde, in iOS- und Android-Apps enthalten sein kann.