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:
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.