Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Astrazione della piattaforma con la libreria di classi portabile

Quando si esegue lo sviluppo per più piattaforme usando .NET Framework, la libreria di classi portabile aiuta a massimizzare il riutilizzo di codice. In alcuni casi sarà tuttavia necessario escludere tramite astrazione codice specifico per una piattaforma, in modo da evitare riferimenti circolari. In questo articolo è disponibile un esempio della procedura specifica.

È spesso possibile che sia voglia chiamare membri non portabili da una classe portabile. Non è possibile chiamare direttamente i membri non portabili, perché non sono disponibili nel progetto Libreria di classi portabile. Si può invece creare una classe astratta nel progetto Libreria di classi portabile e usarla da tutto il codice portabile.

La classe astratta deve dichiarare metodi astratti da usare nel codice portabile e una proprietà statica pubblica che sia un'istanza di se stessa, da usare per inizializzare la classe nel codice specifico per la piattaforma.

Nel progetto specifico per la piattaforma creare una classe figlio della classe astratta e implementare i metodi con comportamenti specifici per la piattaforma. Inizializzare anche l'istanza specifica per la piattaforma, in modo che possa essere usata dal codice portabile.

Nell'esempio seguente viene illustrata una classe portabile per l'utilizzo con impostazioni locali. Le impostazioni locali sono gestite in modo diverso in un'app di Windows Store e un'app di Silverlight, quindi la classe portabile non fornisce alcun dettaglio per l'implementazione. L'implementazione è fornita nelle classi derivate specifiche per la piattaforma.


using System;

namespace ExamplePortableLibrary
{
    public abstract class ExampleLocalSettings
    {
        public abstract void SetLocalValue(string name, object value);

        public static ExampleLocalSettings Instance { get; set; }
    }
}


Nel progetto Silverlight aggiungere un riferimento all'assembly portabile e quindi creare una classe figlio che implementa l'operazione per impostazioni locali specifica per l'ambiente Silverlight. Questo esempio mostra un'implementazione Silverlight della classe ExampleLocalSettings:


using System;
using System.IO.IsolatedStorage;
using ExamplePortableLibrary;

namespace SilverlightApplication1
{
    class SilverlightImplementation : ExampleLocalSettings
    {
        public override void SetLocalValue(string name, object value)
        {
            IsolatedStorageSettings.ApplicationSettings.Add(name, value);
        }
    }
}


Nell'app di Windows Store aggiungere un riferimento all'assembly portabile, quindi creare una classe figlio che implementa l'operazione per impostazioni locali specifica per app di Windows Store. Questo esempio mostra un'implementazione della classe ExampleLocalSettings per un'app di Windows Store:


using System;
using Windows.Storage;
using ExamplePortableLibrary;

namespace App1
{
    class AppImplementation : ExampleLocalSettings
    {
        public override void SetLocalValue(string name, object value)
        {
            ApplicationData.Current.LocalSettings.Values[name] = value;
        }
    }
}


Nell'app di Silverlight e nell'app di Windows Store è necessario inizializzare l'implementazione specifica della classe figlio e impostarla sulla proprietà Instance. In genere questa istanza viene creata all'avvio dell'app. Questo esempio illustra come inizializzare l'implementazione di Silverlight:

ExampleLocalSettings.Instance = new SilverlightImplementation();

Per inizializzare l'implementazione per l'app di Windows Store:

ExampleLocalSettings.Instance = new AppImplementation();

Nel progetto Libreria di classi portabile è possibile usare la proprietà Instance per chiamare il metodo SetLocalValue, come illustrato di seguito:

ExampleLocalSettings.Instance.SetLocalValue("ExampleSetting", "New value to add");
Mostra: