Teilen über


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:

Android und iOS mit einer app, die mit Visual Basic erstellt wurde

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.