Xamarin Android 및 iOS의 Visual BasicVisual Basic in Xamarin Android and iOS

샘플 다운로드 샘플 다운로드Download Sample Download the sample

Taskyvb 샘플 응용 프로그램은 .NET Standard 라이브러리로 컴파일되는 Visual Basic 코드를 Xamarin과 함께 사용할 수 있는 방법을 보여 줍니다.The TaskyVB sample application demonstrates how Visual Basic code compiled into a .NET Standard library can be used with Xamarin. 다음은 Android 및 iOS에서 실행 되는 응용 프로그램의 몇 가지 스크린샷입니다.Here are some screenshots of the resulting apps running on Android and iOS:

Visual Basic로 빌드된 앱을 실행 하는 Android 및 iOSAndroid and iOS running an app built with Visual Basic

예제의 Android 및 iOS 프로젝트는 모두로 C#작성 됩니다.The Android and iOS projects in the example are all written in C#. 각 응용 프로그램에 대 한 사용자 인터페이스는 기본 기술을 사용 하 여 작성 되지만 TodoItem 관리는 XML 파일을 사용 하 여 Visual Basic .NET Standard 라이브러리에서 제공 됩니다 (전체 데이터베이스가 아닌 데모용).The user interface for each application is built with native technologies, while the TodoItem management is provided by the Visual Basic .NET Standard library using an XML file (for demonstration purposes, not a full database).

샘플 연습Sample walkthrough

이 가이드는 iOS 및 Android 용 Taskyvb Xamarin 샘플에서 Visual Basic를 구현 하는 방법에 대해 설명 합니다.This guide discusses how Visual Basic has been implemented in the TaskyVB Xamarin sample for iOS and Android.

참고

이 가이드를 계속 진행 하기 전에 Visual Basic 및 .NET Standard 에 대 한 지침을 검토 합니다.Review the instructions on Visual Basic and .NET Standard before continuing with this guide.

공유 사용자 인터페이스 Visual Basic 코드를 사용 하 여 앱을 빌드하는 방법에 대 한 자세한 내용은 Visual Basic를 사용 하 여 xamarin.ios 를 참조 하세요.Refer to the Xamarin.Forms using Visual Basic instructions to see how to build an app with shared user-interface Visual Basic code.

VisualBasicNetStandardVisualBasicNetStandard

Visual Basic .NET Standard 라이브러리는 Windows의 Visual Studio 에서만 만들 수 있습니다.Visual Basic .NET Standard libraries can only be created in Visual Studio on Windows. 예제 라이브러리에는 이러한 Visual Basic 파일의 응용 프로그램에 대 한 기본 사항이 포함 되어 있습니다.The example library contains the basics of our application in these Visual Basic files:

  • TodoItemTodoItem.vb
  • TodoItemManagerTodoItemManager.vb
  • TodoItemRepositoryXMLTodoItemRepositoryXML.vb
  • XmlStorage .vbXmlStorage.vb

TodoItemTodoItem.vb

이 클래스는 응용 프로그램 전체에서 사용할 비즈니스 개체를 포함 합니다.This class contains the business object to be used throughout the application. Visual Basic에서 정의 되 고로 작성 된 Android 및 iOS 프로젝트와 공유 됩니다 C#.It will be defined in Visual Basic and shared with the Android and iOS projects that are written in C#.

클래스 정의는 다음과 같습니다.The class definition is shown here:

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

이 샘플에서는 XML 직렬화 및 역직렬화를 사용 하 여 TodoItem 개체를 로드 하 고 저장 합니다.The sample uses XML serialization and de-serialization to load and save the TodoItem objects.

TodoItemManagerTodoItemManager.vb

관리자 클래스는 이식 가능한 코드에 대해 ' API '를 표시 합니다.The Manager class presents the ‘API’ for the portable code. TodoItem 클래스에 대 한 기본 CRUD 작업을 제공 하지만 이러한 작업을 구현 하지는 않습니다.It provides basic CRUD operations for the TodoItem class, but no implementation of those operations.

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

생성자는 IXmlStorage의 인스턴스를 매개 변수로 사용 합니다.The constructor takes an instance of IXmlStorage as a parameter. 이렇게 하면 각 플랫폼에서 자체적으로 작동 하는 구현을 제공할 수 있으며, 이식 가능한 코드에서 공유할 수 있는 다른 기능을 설명할 수 있습니다.This allows each platform to provide its own working implementation while still letting the portable code describe other functionality that can be shared.

TodoItemRepositoryTodoItemRepository.vb

리포지토리 클래스에는 TodoItem 개체 목록을 관리 하는 논리가 포함 되어 있습니다.The repository class contains the logic for managing the list of TodoItem objects. 전체 코드는 아래와 같습니다. 논리는 주로 컬렉션에서 추가 및 제거 될 때 TodoItems에서 고유한 ID 값을 관리 하는 데 있습니다.The complete code is shown below – the logic exists mainly to manage a unique ID value across the TodoItems as they are added and removed from the 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

참고

이 코드는 매우 기본적인 데이터 저장소 메커니즘의 예입니다.This code is an example of a very basic data-storage mechanism. .NET Standard 라이브러리가 인터페이스에 대해 코딩 하 여 플랫폼별 기능에 액세스 하는 방법을 보여 주기 위해 제공 됩니다 (이 경우 XML 파일 로드 및 저장).It is provided to demonstrate how a .NET Standard library can code against an interface to access platform-specific functionality (in this case, loading and saving an XML file). 프로덕션 품질 데이터베이스를 대체 하기 위한 것이 아닙니다.It it not intended to be a production-quality database alternative.

Android 및 iOS 응용 프로그램 프로젝트Android and iOS application projects

iOSiOS

IOS 응용 프로그램에서 TodoItemManagerXmlStorageImplementation는이 코드 조각에 표시 된 것 처럼 AppDelegate.cs 파일에 생성 됩니다.In the iOS application the TodoItemManager and the XmlStorageImplementation are created in the AppDelegate.cs file as shown in this code snippet. 처음 네 줄은 데이터가 저장 되는 파일에 대 한 경로를 작성 하는 것입니다. 마지막 두 줄에서는 인스턴스화되는 두 개의 클래스를 보여 줍니다.The first four lines are just building the path to the file where data will be stored; the final two lines show the two classes being instantiated.

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);

AndroidAndroid

Android 응용 프로그램에서 XmlStorageImplementation TodoItemManager는이 코드 조각에 표시 된 것 처럼 Application.cs 파일에 생성 됩니다.In the Android application the TodoItemManager and the XmlStorageImplementation are created in the Application.cs file as shown in this code snippet. 처음 세 줄은 데이터가 저장 되는 파일에 대 한 경로를 작성 하는 것입니다. 마지막 두 줄에서는 인스턴스화되는 두 개의 클래스를 보여 줍니다.The first three lines are just building the path to the file where data will be stored; the final two lines show the two classes being instantiated.

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

TaskMgr = new TodoItemManager(path);

응용 프로그램 코드의 나머지 부분은 주로 사용자 인터페이스와 TaskMgr 클래스를 사용 하 여 TodoItem 클래스를 로드 하 고 저장 하는 것과 관련이 있습니다.The rest of the application code is primarily concerned with the user interface and using the TaskMgr class to load and save TodoItem classes.

Mac용 Visual Studio 2019Visual Studio 2019 for Mac

경고

Mac용 Visual Studio는 Visual Basic 언어 편집을 지원 하지 않습니다. Visual Basic 프로젝트 또는 파일을 만드는 데 사용할 수 있는 메뉴 항목이 없습니다.Visual Studio for Mac does NOT support editing the Visual Basic language – there are no menu items for creating Visual Basic projects or files. .Vb 를 열면 언어 구문 강조 표시, 자동 완성 또는 IntelliSense가 없습니다.If you open a .vb there is no language syntax highlighting, autocomplete, or IntelliSense.

Mac 용 visual Studio 2019는 Windows에서 만든 Visual Studio .NET Standard 프로젝트를 컴파일할 있으므로 iOS 앱에서 해당 프로젝트를 참조할 수 있습니다.Visual Studio 2019 for Mac can compile Visual Studio .NET Standard projects created on Windows, so iOS apps can reference those projects.

Visual Studio 2017은 Visual Basic 프로젝트를 빌드할 수 없습니다 .Visual Studio 2017 cannot build Visual Basic projects at all.

요약Summary

이 문서에서는 Visual Studio 및 .NET Standard 라이브러리를 사용 하 여 Xamarin 응용 프로그램에서 Visual Basic 코드를 사용 하는 방법을 보여 주었습니다.This article has demonstrated how to consume Visual Basic code in Xamarin applications using Visual Studio and .NET Standard libraries. Xamarin은 Visual Basic를 직접 지원 하지 않지만 Visual Basic를 .NET Standard 라이브러리로 컴파일하면 Visual Basic로 작성 된 코드를 iOS 및 Android 앱에 포함할 수 있습니다.Even though Xamarin does not support Visual Basic directly, compiling Visual Basic into a .NET Standard library allows code written with Visual Basic to be included in iOS and Android apps.