Condividi tramite


Riepilogo del capitolo 9. Chiamate di API specifiche della piattaforma

Nota

Questo libro è stato pubblicato nella primavera del 2016, e non è stato aggiornato da allora. C'è molto nel libro che rimane prezioso, ma alcuni materiali sono obsoleti, e alcuni argomenti non sono più completamente corretti o completi.

A volte è necessario eseguire codice che varia in base alla piattaforma. Questo capitolo illustra le tecniche.

Pre-elaborazione nel progetto di asset condivisi

Un Xamarin.Forms progetto di asset condiviso può eseguire codice diverso per ogni piattaforma usando le direttive #ifdel preprocessore C# , #elife endif. Questo è illustrato in PlatInfoSap1:

Screenshot triplo del paragrafo formattato della variabile

Tuttavia, il codice risultante può essere brutto e difficile da leggere.

Classi parallele nel progetto di asset condiviso

Un approccio più strutturato all'esecuzione di codice specifico della piattaforma in SAP è illustrato nell'esempio PlatInfoSap2 . Ognuno dei progetti di piattaforma contiene una classe e metodi denominati in modo identico, ma implementati per tale particolare piattaforma. SAP crea quindi semplicemente un'istanza della classe e chiama il metodo .

DependencyService e la libreria di classi portabile

Nota

Le librerie di classi portabili sono state sostituite da librerie .NET Standard. Tutto il codice di esempio del libro è stato convertito per l'uso di librerie .NET Standard.

Una libreria non può in genere accedere alle classi nei progetti dell'applicazione. Questa restrizione sembra impedire l'uso della tecnica illustrata in PlatInfoSap2 in una libreria. Contiene tuttavia Xamarin.Forms una classe denominata DependencyService che usa la reflection .NET per accedere alle classi pubbliche nel progetto dell'applicazione dalla libreria.

La libreria deve definire un oggetto interface con i membri da usare in ogni piattaforma. Ognuna delle piattaforme contiene quindi un'implementazione di tale interfaccia. La classe che implementa l'interfaccia deve essere identificata con DependencyAttribute a livello di assembly.

La libreria usa quindi il metodo generico Get di DependencyService per ottenere un'istanza della classe platform che implementa l'interfaccia .

Questo è illustrato nell'esempio DisplayPlatformInfo .

Generazione di suoni specifica della piattaforma

L'esempio MonkeyTapWithSound aggiunge beeps al programma MonkeyTap accedendo a strutture di generazione audio in ogni piattaforma.