Udostępnij za pośrednictwem


Visual Basic w środowisku Xamarin Android i iOS

Przykładowa aplikacja demonstruje sposób kompilowania kodu języka Visual Basic w bibliotece .NET Standard z platformą Xamarin. Poniżej przedstawiono kilka zrzutów ekranu przedstawiający wynikowe aplikacje działające w systemach Android i iOS:

Android i iOS z uruchomioną aplikacją utworzoną za pomocą języka Visual Basic

Wszystkie projekty systemu Android i iOS w tym przykładzie są zapisywane w języku C#. Interfejs użytkownika dla każdej aplikacji jest kompilowany za pomocą technologii natywnych, podczas gdy TodoItem zarządzanie jest udostępniane przez bibliotekę Visual Basic .NET Standard przy użyciu pliku XML (w celach demonstracyjnych, a nie pełnej bazy danych).

Przewodnik po przykładzie

W tym przewodniku omówiono sposób implementacji języka Visual Basic w przykładzie platformy Xamarin TaskyVB dla systemów iOS i Android.

Uwaga

Przed kontynuowaniem pracy z tym przewodnikiem przejrzyj instrukcje dotyczące języków Visual Basic i .NET Standard .

Zapoznaj się z instrukcjami platformy Xamarin.Forms przy użyciu języka Visual Basic , aby zobaczyć, jak utworzyć aplikację przy użyciu udostępnionego kodu języka Visual Basic interfejsu użytkownika.

VisualBasicNetStandard

Biblioteki Visual Basic .NET Standard można tworzyć tylko w programie Visual Studio w systemie Windows. Przykładowa biblioteka zawiera podstawy naszej aplikacji w następujących plikach Języka Visual Basic:

  • TodoItem.vb
  • TodoItemManager.vb
  • TodoItemRepositoryXML.vb
  • XmlStorage.vb

TodoItem.vb

Ta klasa zawiera obiekt biznesowy, który ma być używany w całej aplikacji. Zostanie on zdefiniowany w języku Visual Basic i udostępniony projektom systemu Android i iOS napisanym w języku C#.

Definicja klasy jest pokazana tutaj:

Public Class TodoItem
    Property ID() As Integer
    Property Name() As String
    Property Notes() As String
    Property Done() As Boolean
End Class

W przykładzie użyto serializacji XML i dese serializacji w celu załadowania i zapisania obiektów TodoItem.

TodoItemManager.vb

Klasa Manager przedstawia "INTERFEJS API" dla kodu przenośnego. Zapewnia ona podstawowe operacje CRUD dla TodoItem klasy, ale nie zawiera implementacji tych operacji.

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 przyjmuje wystąpienie elementu IXmlStorage jako parametr. Dzięki temu każda platforma może zapewnić własną działającą implementację, umożliwiając jednocześnie przenośnemu kodowi opisywanie innych funkcji, które mogą być udostępniane.

TodoItemRepository.vb

Klasa repozytorium zawiera logikę zarządzania listą obiektów TodoItem. Pełny kod jest pokazany poniżej — logika istnieje głównie do zarządzania unikatową wartością identyfikatora w obiektach TodoItems, ponieważ są one dodawane i usuwane z kolekcji.

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

Uwaga

Ten kod jest przykładem bardzo podstawowego mechanizmu przechowywania danych. Przedstawiono sposób kodowania biblioteki .NET Standard dla interfejsu w celu uzyskania dostępu do funkcji specyficznych dla platformy (w tym przypadku ładowania i zapisywania pliku XML). Nie jest to alternatywa dla bazy danych jakości produkcyjnej.

Projekty aplikacji dla systemów Android i iOS

iOS

W aplikacji TodoItemManager systemu iOS element i XmlStorageImplementation są tworzone w pliku AppDelegate.cs , jak pokazano w tym fragmencie kodu. Pierwsze cztery wiersze po prostu budują ścieżkę do pliku, w którym będą przechowywane dane; dwa ostatnie wiersze pokazują, że tworzone są wystąpienia dwóch klas.

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

W aplikacji TodoItemManager systemu Android element i XmlStorageImplementation są tworzone w pliku Application.cs , jak pokazano w tym fragmencie kodu. Pierwsze trzy wiersze po prostu budują ścieżkę do pliku, w którym będą przechowywane dane; dwa ostatnie wiersze pokazują, że tworzone są wystąpienia dwóch klas.

var xmlFilename = "TodoList.xml";
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = Path.Combine(libraryPath, xmlFilename);

TaskMgr = new TodoItemManager(path);

Pozostała część kodu aplikacji dotyczy głównie interfejsu użytkownika i używania TaskMgr klasy do ładowania i zapisywania TodoItem klas.

Visual Studio 2019 dla komputerów Mac

Ostrzeżenie

Visual Studio dla komputerów Mac nie obsługuje edytowania języka Visual Basic — nie ma elementów menu do tworzenia projektów ani plików języka Visual Basic. Jeśli otworzysz .vb nie ma wyróżniania składni języka, autouzupełniania ani funkcji IntelliSense.

Program Visual Studio 2019 dla komputerów Mac może kompilować projekty programu Visual Studio .NET Standard utworzone w systemie Windows, dzięki czemu aplikacje systemu iOS mogą odwoływać się do tych projektów.

Program Visual Studio 2017 nie może w ogóle kompilować projektów Visual Basic.

Podsumowanie

W tym artykule pokazano, jak korzystać z kodu Visual Basic w aplikacjach platformy Xamarin przy użyciu bibliotek Visual Studio i .NET Standard. Mimo że platforma Xamarin nie obsługuje języka Visual Basic bezpośrednio, kompilowanie języka Visual Basic w bibliotece .NET Standard umożliwia dołączanie kodu napisanego przy użyciu języka Visual Basic w aplikacjach dla systemów iOS i Android.