Condividi tramite


Progettazione di proprietà indicizzate

Le proprietà indicizzate consentono l'accesso a gruppi di elementi, ad esempio i caratteri di una stringa o i bit di una BitArray, simile a quello consentito dalle matrici. Le proprietà indicizzate, dette indicizzatori o proprietà predefinite, differiscono dalle proprietà normali in quanto accettano parametri che indicano l'elemento del gruppo a cui accedere. L'implementazione di una proprietà indicizzata deve essere il più semplice possibile poiché gli indicizzatori vengono spesso utilizzati in cicli. Le linee guida riportate di seguito servono a garantire che i tipi contengano indici progettati correttamente.

Si consiglia di utilizzare degli indicizzatori per fornire l'accesso a dati archiviati in una matrice interna.

Si consiglia di fornire degli indicizzatori in tipi che rappresentano insiemi di elementi.

Evitare proprietà indicizzate con più parametri.

Se un indicizzatore richiede più parametri, valutare nuovamente se la proprietà rappresenta realmente l'accesso a un insieme logico. In caso contrario, utilizzare dei metodi scegliendo possibilmente dei nomi che iniziano con Get o Set.

Evitare indicizzatori con tipi di parametri diversi da System.Int32, System.Int64, System.String, System.Object, enumerazioni o parametri di tipo generico.

Se il progetto richiede altri tipi di parametri, è necessario rivalutare attentamente se il membro rappresenta l'accesso a un insieme logico. In caso contrario, utilizzare dei metodi, scegliendo possibilmente dei nomi che iniziano con Get o Set.

Per le proprietà indicizzate utilizzare sempre il nome Item, a meno che non sia disponibile un nome chiaramente più appropriato. Vedere, ad esempio, la proprietà System.String.Chars (System.Int32).

L'attributo IndexerNameAttribute può essere utilizzato per personalizzare il nome di un indicizzatore.

Non fornire contemporaneamente un indicizzatore e dei metodi semanticamente equivalenti.

Nell'esempio di codice riportato di seguito l'indicizzatore deve essere convertito in un metodo.

<System.Runtime.CompilerServices.IndexerNameAttribute("PositionsHeld")> _
    Public Property Item (skillId as Integer) as JobInfoCollection


...


Public Function GetPositions(skillId as Integer, _
    minJobLevel as Integer) _
   as JobInfoCollection
[System.Runtime.CompilerServices.IndexerNameAttribute("PositionsHeld")]
    public JobInfoCollection this [int skillId]


...


public JobInfoCollection GetPositions(int skillId, int minJobLevel)
[System::Runtime::CompilerServices::IndexerNameAttribute("PositionsHeld")]
property JobInfoCollection^ default [int]


...


JobInfoCollection^ GetPositions(int skillId, int minJobLevel)

Non fornire più di una famiglia di indicizzatori di overload in un tipo.

Alcuni compilatori, quali C#, impongono questa procedura.

Alcuni linguaggi non supportano più insiemi di indicizzatori. In questi casi, se vengono utilizzati più insiemi, alcuni sviluppatori non saranno in grado di accedere ai membri.

Non utilizzare proprietà indicizzate non predefinite.

Alcuni compilatori, quali C#, impongono questa procedura. Non tutti i linguaggi di programmazione supportano proprietà indicizzate non predefinite. In questi casi, se vengono utilizzate queste proprietà, alcuni sviluppatori non saranno in grado di accedere ai membri.

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

Progettazione di proprietà

Altre risorse

Linee guida di progettazione dei membri

Linee guida di progettazione per lo sviluppo di librerie di classi