Сводная информация о Главе 9. Вызовы API конкретных платформ
Примечание.
Эта книга была опубликована весной 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, осуществляя доступ к средствам создания звука на каждой платформе.