Condividi tramite


Progettazione di interfacce

Un'interfaccia definisce le firme per un insieme di membri che deve essere fornito dai responsabili dell'implementazione. Le interfacce non possono fornire dettagli di implementazione per i membri. L'interfaccia ICollection, ad esempio, definisce i membri che vengono utilizzati nella gestione degli insiemi. Ciascuna classe concreta che implementa l'interfaccia deve fornire i dettagli di implementazione per questi membri. Mentre le classi possono ereditare da una singola classe, i membri possono implementare più interfacce. Le linee guida riportate di seguito contribuiscono a garantire la corretta progettazione delle interfacce.

Definire un'interfaccia se sono necessarie funzionalità comuni che devono essere supportate da un insieme di tipi che include alcuni tipi di valore.

I tipi di valore devono ereditare da ValueType. Le classi astratte non possono quindi essere utilizzate per specificare un contratto per tipi di valore. A tal scopo vengono invece utilizzate le interfacce.

Si consiglia di definire un'interfaccia se è necessario supportarne la funzionalità su tipi che ereditano già da qualche altro tipo.

Evitare di utilizzare interfacce marker (interfacce senza membri).

Per contrassegnare un tipo è possibile utilizzare attributi personalizzati. Per ulteriori informazioni sugli attributi personalizzati, vedere Scrittura di attributi personalizzati. Gli attributi personalizzati sono da preferire quando è possibile rimandare la ricerca dell'attributo fino a quando non è terminata l'esecuzione del codice. Se lo scenario richiede la ricerca in fase di compilazione, non è possibile attenersi a questa indicazione.

Fornire almeno un tipo che sia l'implementazione di un'interfaccia.

Ciò contribuisce a garantire che l'interfaccia venga progettata correttamente e che possa essere implementata senza eccessiva difficoltà. La classe Int32 fornisce un'implementazione dell'interfaccia IComparable.

Fornire almeno un membro che utilizzi ciascuna interfaccia definita (ad esempio, un metodo che accetta l'interfaccia come un parametro o una proprietà tipizzata come l'interfaccia).

Anche questa procedura contribuisce a garantire che l'interfaccia venga progettata correttamente e possa essere implementata senza eccessiva difficoltà.

Non aggiungere membri a un'interfaccia fornita in precedenza.

L'aggiunta di membri interromperebbe il codice che ha implementato la precedente versione dell'interfaccia. Questo costituisce uno dei principali motivi per cui, in generale e ove possibile, è preferibile utilizzare classi piuttosto che interfacce. Per ulteriori informazioni, vedere Scelta tra classi e interfacce.

Se la definizione dell'interfaccia richiede membri aggiuntivi, per utilizzarla è possibile implementare una nuova interfaccia e i membri appropriati.

Portions Copyright 2005 Microsoft Corporation. Tutti i diritti riservati.

Portions Copyright Addison-Wesley Corporation. Tutti i diritti riservati.

Per ulteriori informazioni sulle linee guida di progettazione, vedere “le linee guida di progettazione di Framework: Idiomi convenzioni, e modelli per libro raccolte riutilizzabili .NET„ di Krzysztof Cwalina e brad Abrams, emessi da Addison-Wesley, 2005.

Vedere anche

Concetti

Scelta tra classi e interfacce

Altre risorse

Linee guida di progettazione dei tipi

Linee guida di progettazione per lo sviluppo di librerie di classi