Sdílet prostřednictvím


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:

Android a iOS s aplikací sestavenou pomocí jazyka Visual Basic

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.