Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 #ifpreprocesora języka C# , #elifi 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.
