Condividi tramite


Visual Basic in Xamarin Android e iOS

L'applicazione di esempio illustra come usare il codice Visual Basic compilato in una libreria .NET Standard con Xamarin. Ecco alcuni screenshot delle app risultanti in esecuzione in Android e iOS:

Android e iOS che eseguono un'app compilata con Visual Basic

I progetti Android e iOS nell'esempio sono tutti scritti in C#. L'interfaccia utente per ogni applicazione viene compilata con tecnologie native, mentre la TodoItem gestione viene fornita dalla libreria .NET Standard di Visual Basic usando un file XML (a scopo dimostrativo, non un database completo).

Procedura dettagliata di esempio

Questa guida illustra come Visual Basic è stato implementato nell'esempio di Xamarin TaskyVB per iOS e Android.

Nota

Esaminare le istruzioni su Visual Basic e .NET Standard prima di continuare con questa guida.

Fare riferimento a Xamarin.Forms usando le istruzioni di Visual Basic per informazioni su come compilare un'app con codice Visual Basic con interfaccia utente condivisa.

VisualBasicNetStandard

Le librerie .NET Standard di Visual Basic possono essere create solo in Visual Studio in Windows. La libreria di esempio contiene le nozioni di base dell'applicazione nei file di Visual Basic seguenti:

  • TodoItem.vb
  • TodoItemManager.vb
  • TodoItemRepositoryXML.vb
  • Xml Archiviazione.vb

TodoItem.vb

Questa classe contiene l'oggetto business da usare in tutta l'applicazione. Verrà definita in Visual Basic e condivisa con i progetti Android e iOS scritti in C#.

La definizione della classe è illustrata di seguito:

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

L'esempio usa la serializzazione XML e la de-serializzazione per caricare e salvare gli oggetti TodoItem.

TodoItemManager.vb

La classe Manager presenta l'API per il codice portabile. Fornisce operazioni CRUD di base per la TodoItem classe , ma nessuna implementazione di tali operazioni.

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

Il costruttore accetta un'istanza di IXml Archiviazione come parametro. In questo modo ogni piattaforma può fornire una propria implementazione funzionante, consentendo al codice portatile di descrivere altre funzionalità che possono essere condivise.

TodoItemRepository.vb

La classe del repository contiene la logica per la gestione dell'elenco di oggetti TodoItem. Il codice completo è illustrato di seguito. La logica esiste principalmente per gestire un valore ID univoco in TodoItems man mano che vengono aggiunti e rimossi dalla raccolta.

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

Nota

Questo codice è un esempio di meccanismo di archiviazione dei dati di base. Viene fornito per dimostrare come una libreria .NET Standard possa codificare in base a un'interfaccia per accedere a funzionalità specifiche della piattaforma (in questo caso, caricamento e salvataggio di un file XML). Non è un'alternativa al database di qualità di produzione.

Progetti di applicazioni Android e iOS

iOS

Nell'applicazione TodoItemManager iOS e XmlStorageImplementation vengono creati nel file AppDelegate.cs come illustrato in questo frammento di codice. Le prime quattro righe stanno semplicemente creando il percorso del file in cui verranno archiviati i dati; le due righe finali mostrano le due classi di cui viene creata un'istanza.

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

Nell'applicazione TodoItemManager Android e XmlStorageImplementation vengono creati nel file Application.cs come illustrato in questo frammento di codice. Le prime tre righe creano solo il percorso del file in cui verranno archiviati i dati; le due righe finali mostrano le due classi di cui viene creata un'istanza.

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

TaskMgr = new TodoItemManager(path);

Il resto del codice dell'applicazione riguarda principalmente l'interfaccia utente e l'uso della TaskMgr classe per caricare e salvare TodoItem le classi.

Visual Studio 2019 per Mac

Avviso

Visual Studio per Mac non supporta la modifica del linguaggio Visual Basic. Non sono disponibili voci di menu per la creazione di progetti o file di Visual Basic. Se si apre un .vb non è presente alcuna evidenziazione della sintassi del linguaggio, completamento automatico o IntelliSense.

Visual Studio 2019 per Mac può compilare progetti .NET Standard di Visual Studio creati in Windows, in modo che le app iOS possano fare riferimento a tali progetti.

Visual Studio 2017 non può compilare progetti Visual Basic.

Riepilogo

Questo articolo ha illustrato come usare il codice Visual Basic nelle applicazioni Xamarin usando le librerie di Visual Studio e .NET Standard. Anche se Xamarin non supporta direttamente Visual Basic, la compilazione di Visual Basic in una libreria .NET Standard consente di includere il codice scritto con Visual Basic nelle app iOS e Android.