Visual Basic в Xamarin Android и iOS

Download Sample Скачайте пример

Пример приложения TaskyVB демонстрирует, как код Visual Basic, скомпилированный в библиотеку .NET Standard, можно использовать с Xamarin. Ниже приведены некоторые снимки экрана полученных приложений, работающих в Android и iOS:

Android and iOS running an app built with Visual Basic

Проекты Android и iOS в примере написаны на C#. Пользовательский интерфейс для каждого приложения создается с помощью собственных технологий, а TodoItem управление предоставляется библиотекой Visual Basic .NET Standard с помощью XML-файла (для демонстрационных целей, а не полной базы данных).

Пример пошагового руководства

В этом руководстве описывается реализация Visual Basic в примере TaskyVB Xamarin для iOS и Android.

Примечание.

Ознакомьтесь с инструкциями по Visual Basic и .NET Standard , прежде чем продолжить работу с этим руководством.

Ознакомьтесь с инструкциями по Xamarin.Forms, чтобы узнать, как создать приложение с общим кодом Visual Basic пользовательского интерфейса.

VisualBasicNetStandard

Библиотеки Visual Basic .NET Standard можно создавать только в Visual Studio в Windows. Библиотека примеров содержит основы нашего приложения в следующих файлах Visual Basic:

  • TodoItem.vb
  • TodoItemManager.vb
  • TodoItemRepositoryXML.vb
  • Xml служба хранилища.vb

TodoItem.vb

Этот класс содержит бизнес-объект, используемый во всем приложении. Он будет определен в Visual Basic и предоставлен общий доступ к проектам Android и iOS, написанным на C#.

Здесь показано определение класса:

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

В примере используется сериализация XML и десериализация для загрузки и сохранения объектов TodoItem.

TodoItemManager.vb

Класс Manager представляет api для переносимого кода. Он предоставляет базовые операции CRUD для TodoItem класса, но не реализует эти операции.

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

Конструктор принимает экземпляр IXml служба хранилища в качестве параметра. Это позволяет каждой платформе предоставлять собственную рабочую реализацию, позволяя переносимому коду описывать другие функциональные возможности, которые можно совместно использовать.

TodoItemRepository.vb

Класс репозитория содержит логику управления списком объектов TodoItem. Полный код показан ниже. Логика существует в основном для управления уникальным значением идентификатора в TodoItems, так как они добавляются и удаляются из коллекции.

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

Примечание.

Этот код является примером очень простого механизма хранения данных. Он предоставляется для демонстрации того, как библиотека .NET Standard может кодировать интерфейс для доступа к функциям конкретной платформы (в данном случае загрузка и сохранение XML-файла). Она не предназначена для создания альтернативы рабочей базе данных.

Проекты приложений Android и iOS

iOS

В приложении TodoItemManager iOS создается и XmlStorageImplementation создается в файле AppDelegate.cs , как показано в этом фрагменте кода. Первые четыре строки просто создают путь к файлу, в котором будут храниться данные; Последние две строки показывают, что создаются два класса.

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

В приложении TodoItemManager Android создается и XmlStorageImplementation создается в файле Application.cs , как показано в этом фрагменте кода. Первые три строки просто создают путь к файлу, в котором будут храниться данные; Последние две строки показывают, что создаются два класса.

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

TaskMgr = new TodoItemManager(path);

Остальная часть кода приложения в основном связана с пользовательским интерфейсом и использованием TaskMgr класса для загрузки и сохранения TodoItem классов.

Visual Studio 2019 для Mac

Предупреждение

Visual Studio для Mac не поддерживает редактирование языка Visual Basic. Для создания проектов или файлов Visual Basic нет элементов меню. Если открыть .vb нет синтаксиса языка, выделения, автозаполнения или IntelliSense.

Visual Studio 2019 для Mac может компилировать проекты Visual Studio .NET Standard, созданные в Windows, поэтому приложения iOS могут ссылаться на эти проекты.

Visual Studio 2017 не может создавать проекты Visual Basic вообще.

Итоги

В этой статье показано, как использовать код Visual Basic в приложениях Xamarin с помощью библиотек Visual Studio и .NET Standard. Несмотря на то, что Xamarin не поддерживает Visual Basic напрямую, компиляция Visual Basic в библиотеку .NET Standard позволяет включать код с помощью Visual Basic в приложения iOS и Android.