Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Примечание.
Эта книга была опубликована весной 2016 года и с тех пор не обновлялась. Многое в этой книге остается ценным, но некоторые материалы устарели, а некоторые разделы перестали быть полностью верными или полными.
Иногда требуется выполнить код, меняющийся в зависимости от платформы. В этой главе рассматриваются методы.
Предварительная обработка в проекте общих ресурсов
Проект общих ресурсов Xamarin.Forms может выполнять разные коды для каждой платформы с помощью директив препроцессора C# #if, #elif и endif. Это продемонстрировано в PlatInfoSap1:
Однако результирующий код может быть трудным для чтения.
Параллельные классы в проекте общих ресурсов
Более структурированный подход к выполнению кода, зависящего от платформы, продемонстрирован в SAP в примере PlatInfoSap2. Каждый из проектов платформы содержит класс и методы с одинаковыми названиями, однако они реализованы для отдельной платформы. Затем SAP просто создает экземпляр класса и вызывает метод.
DependencyService и Переносимая библиотека классов
Примечание.
Переносимые библиотеки классов заменены библиотеками .NET Standard. Все примеры кода в этой книге преобразованы для использования библиотек .NET Standard.
Обычно библиотека не может получить доступ к классам в проектах приложений. По-видимому, это ограничение не позволяет использовать в библиотеке метод, показанный в PlatInfoSap2. Однако Xamarin.Forms содержит класс с именем DependencyService, который использует отражение .NET для доступа к открытым классам в проекте приложения из библиотеки.
Библиотека должна определять interface с элементами, которые она должна использовать на каждой платформе. Затем каждая из платформ содержит реализацию этого интерфейса. Класс, реализующий интерфейс, должен быть идентифицирован на уровне сборки с помощью DependencyAttribute.
Затем, чтобы получить экземпляр класса платформы, реализующего интерфейс, библиотека использует универсальный метод Get из DependencyService.
Это показано в примере DisplayPlatformInfo.
Создание звука для конкретной платформы
Пример MonkeyTapWithSound добавляет звуковые сигналы в программу MonkeyTap, осуществляя доступ к средствам создания звука на каждой платформе.
