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