Share via


Zusammenfassung von Kapitel 9. Plattformspezifische API-Aufrufe

Hinweis

Dieses Buch wurde im Frühjahr 2016 veröffentlicht und seitdem nicht aktualisiert. Wenngleich ein großer Teil des Buchs weiterhin relevante Informationen liefert, sind einige Abschnitte veraltet, und einige Themen sind nicht mehr korrekt oder vollständig.

In einigen Fällen muss Code ausgeführt werden, der abhängig von der Plattform variiert. In diesem Kapitel werden die Verfahren erläutert.

Vorverarbeitung im Projekt mit freigegebenen Anlagen

Ein Projekt mit freigegebenen Anlagen in Xamarin.Forms kann mithilfe der C#-Präprozessoranweisungen (#if, #elif und endif) unterschiedlichen Code für die verschiedenen Plattformen ausführen. Dies wird in PlatInfoSap1 veranschaulicht:

Dreifacher Screenshot eines unterschiedlich formatierten Absatzes

Der resultierende Code kann jedoch unschön und schwer lesbar sein.

Parallele Klassen im Projekt mit freigegebenen Anlagen

Ein strukturierteres Verfahren zum Ausführen von plattformspezifischem Code in SAP wird im Beispiel PlatInfoSap2 gezeigt. Alle Plattformprojekte umfassen eine Klasse und Methoden mit identischem Namen. Die Implementierung erfolgt jedoch plattformspezifisch. In SAP wird die Klasse dann lediglich instanziiert, und die Methode wird aufgerufen.

DependencyService und die portable Klassenbibliothek

Hinweis

Portable Klassenbibliotheken wurden durch .NET Standard-Bibliotheken ersetzt. Der gesamte Beispielcode innerhalb des Buchs wurde aktualisiert und verwendet jetzt die .NET Standard-Bibliotheken.

Eine Bibliothek kann normalerweise nicht auf Klassen in Anwendungsprojekten zugreifen. Aufgrund dieser Einschränkung scheint es nicht möglich zu sein, das in PlatInfoSap2 gezeigte Verfahren in einer Bibliothek zu verwenden. Xamarin.Forms enthält aber eine Klasse mit dem Namen DependencyService, die eine .NET-Reflexion verwendet, um aus der Bibliothek auf öffentliche Klassen im Anwendungsprojekt zuzugreifen.

Die Bibliothek muss ein interface mit den Membern definieren, die für jede Plattform verwendet werden müssen. Jede Plattform enthält dann eine Implementierung dieser Schnittstelle. Die Klasse, die die Schnittstelle implementiert, muss mit einem DependencyAttribute auf Assemblyebene gekennzeichnet sein.

Die Bibliothek verwendet dann die generische Methode Get von DependencyService, um eine Instanz der Plattformklasse abzurufen, die die Schnittstelle implementiert.

Dies wird im Beispiel DisplayPlatformInfo veranschaulicht.

Plattformspezifische Tonerzeugung

Mit dem Beispiel MonkeyTapWithSound werden Töne zum MonkeyTap-Programm hinzugefügt, indem auf Funktionen zur Tonerzeugung der jeweiligen Plattform zugegriffen wird.