Podsumowanie rozdziału 9. Wywołania interfejsów API specyficznych dla platformy
Uwaga
Ta książka została opublikowana wiosną 2016 roku i od tego czasu nie została zaktualizowana. Jest wiele w książce, która pozostaje cenna, ale niektóre materiały są nieaktualne, a niektóre tematy nie są już całkowicie poprawne ani kompletne.
Czasami konieczne jest uruchomienie kodu, który różni się w zależności od platformy. W tym rozdziale omówiono techniki.
Wstępne przetwarzanie w projekcie współużytkowanego zasobu
Projekt Xamarin.Forms współużytkowanego zasobu może wykonywać inny kod dla każdej platformy przy użyciu dyrektyw #if
preprocesora języka C# , #elif
i endif
. Przedstawiono to w elemecie PlatInfoSap1:
Jednak wynikowy kod może być brzydki i trudny do odczytania.
Klasy równoległe w projekcie współużytkowanego zasobu
Bardziej ustrukturyzowane podejście do wykonywania kodu specyficznego dla platformy w oprogramowaniu SAP przedstawiono w przykładzie PlatInfoSap2 . Każdy projekt platformy zawiera identycznie nazwaną klasę i metody, ale zaimplementowany dla tej konkretnej platformy. Następnie sap tworzy wystąpienie klasy i wywołuje metodę .
DependencyService i przenośna biblioteka klas
Uwaga
Biblioteki klas przenośnych zostały zastąpione przez biblioteki .NET Standard. Cały przykładowy kod z książki został przekonwertowany w celu używania bibliotek standardowych platformy .NET.
Biblioteka zwykle nie może uzyskiwać dostępu do klas w projektach aplikacji. To ograniczenie wydaje się uniemożliwiać korzystanie z techniki przedstawionej w bibliotece PlatInfoSap2 . Xamarin.Forms Zawiera jednak klasę o nazwie DependencyService
, która używa odbicia platformy .NET do uzyskiwania dostępu do klas publicznych w projekcie aplikacji z biblioteki.
Biblioteka musi zdefiniować element interface
z elementami członkowskimi, których musi używać na każdej platformie. Następnie każda z platform zawiera implementację tego interfejsu. Klasa, która implementuje interfejs, musi być identyfikowana z atrybutem DependencyAttribute na poziomie zestawu.
Następnie biblioteka używa ogólnej Get
metody DependencyService
w celu uzyskania wystąpienia klasy platformy, które implementuje interfejs.
Jest to pokazane w przykładzie DisplayPlatformInfo .
Generowanie dźwięku specyficznego dla platformy
Przykład MonkeyTapWithSound dodaje sygnały dźwiękowe do programu MonkeyTap, uzyskując dostęp do obiektów generowania dźwięku na każdej platformie.