Partager via


Visual Basic dans Xamarin Android et iOS

L’exemple d’application montre comment le code Visual Basic compilé dans une bibliothèque .NET Standard peut être utilisé avec Xamarin. Voici quelques captures d’écran des applications résultantes s’exécutant sur Android et iOS :

Android et iOS exécutant une application créée avec Visual Basic

Les projets Android et iOS de l’exemple sont tous écrits en C#. L’interface utilisateur de chaque application est générée avec des technologies natives, tandis que la TodoItem gestion est fournie par la bibliothèque Visual Basic .NET Standard à l’aide d’un fichier XML (à des fins de démonstration, et non d’une base de données complète).

Exemple de procédure pas à pas

Ce guide explique comment Visual Basic a été implémenté dans l’exemple TaskyVB Xamarin pour iOS et Android.

Remarque

Passez en revue les instructions sur Visual Basic et .NET Standard avant de continuer avec ce guide.

Reportez-vous aux instructions Xamarin.Forms à l’aide de Visual Basic pour voir comment créer une application avec du code Visual Basic d’interface utilisateur partagée.

VisualBasicNetStandard

Les bibliothèques Visual Basic .NET Standard ne peuvent être créées que dans Visual Studio sur Windows. L’exemple de bibliothèque contient les bases de notre application dans ces fichiers Visual Basic :

  • TodoItem.vb
  • TodoItemManager.vb
  • TodoItemRepositoryXML.vb
  • Xml Stockage.vb

TodoItem.vb

Cette classe contient l’objet métier à utiliser dans l’application. Elle sera définie en Visual Basic et partagée avec les projets Android et iOS écrits en C#.

La définition de classe est illustrée ici :

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

L’exemple utilise la sérialisation XML et la désérialisation pour charger et enregistrer les objets TodoItem.

TodoItemManager.vb

La classe Manager présente l’API pour le code portable. Il fournit des opérations CRUD de base pour la TodoItem classe, mais aucune implémentation de ces opérations.

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

Le constructeur prend une instance d’IXml Stockage en tant que paramètre. Cela permet à chaque plateforme de fournir sa propre implémentation opérationnelle tout en laissant le code portable décrire d’autres fonctionnalités qui peuvent être partagées.

TodoItemRepository.vb

La classe de référentiel contient la logique de gestion de la liste des objets TodoItem. Le code complet est illustré ci-dessous : la logique existe principalement pour gérer une valeur d’ID unique dans les TodoItems, car elles sont ajoutées et supprimées de la collection.

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

Remarque

Ce code est un exemple de mécanisme de stockage de données de base. Il est fourni pour montrer comment une bibliothèque .NET Standard peut coder sur une interface pour accéder aux fonctionnalités spécifiques à la plateforme (dans ce cas, le chargement et l’enregistrement d’un fichier XML). Il ne s’agit pas d’une alternative de base de données de qualité de production.

Projets d’application Android et iOS

iOS

Dans l’application iOS, TodoItemManager et les XmlStorageImplementation fichiers sont créés dans le fichier AppDelegate.cs , comme indiqué dans cet extrait de code. Les quatre premières lignes créent simplement le chemin d’accès au fichier où les données seront stockées ; les deux dernières lignes montrent les deux classes instanciées.

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

Dans l’application TodoItemManager Android, et les XmlStorageImplementation fichiers sont créés dans le fichier Application.cs , comme indiqué dans cet extrait de code. Les trois premières lignes créent simplement le chemin d’accès au fichier où les données seront stockées ; les deux dernières lignes montrent les deux classes instanciées.

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

TaskMgr = new TodoItemManager(path);

Le reste du code d’application concerne principalement l’interface utilisateur et l’utilisation de la TaskMgr classe pour charger et enregistrer TodoItem des classes.

Visual Studio 2019 pour Mac

Avertissement

Visual Studio pour Mac ne prend pas en charge la modification du langage Visual Basic : il n’existe aucun élément de menu pour la création de projets ou de fichiers Visual Basic. Si vous ouvrez un .vb il n’existe aucune mise en surbrillance de la syntaxe de langage, de saisie semi-automatique ou d’IntelliSense.

Visual Studio 2019 pour Mac peut compiler des projets Visual Studio .NET Standard créés sur Windows, afin que les applications iOS puissent référencer ces projets.

Visual Studio 2017 ne peut pas générer de projets Visual Basic du tout.

Résumé

Cet article a montré comment utiliser du code Visual Basic dans des applications Xamarin à l’aide de bibliothèques Visual Studio et .NET Standard. Même si Xamarin ne prend pas directement en charge Visual Basic, la compilation de Visual Basic dans une bibliothèque .NET Standard permet au code écrit avec Visual Basic d’être inclus dans les applications iOS et Android.