Indexed default property

Il linguaggio C# permette di creare delle proprietà di una classe particolari, queste vengono chiamate proprietà indexed default.
L’idea è poter fare una cosa del genere:

Test t = new Test();
string value = t[1];
// value assume un valore in base a quanto è stato definito nella classe Test

Come si vede dall’esempio indicato sopra, voglio poter accedere ad una classe come se fosse una specie di array, anche se ovviamente questo non è.
Spesso questo comportamento viene implementato quando la classe interna ha effettivamente una List o un Dictionary come proprietà e creo questo modo comodo per potervi accedere.
Proseguiamo la spiegazione con un esempio, preso da questo link.
Assumiamo di avere un oggetto Club con al suo interno una List di oggetti Person, ed inoltre ha una default indexer property per poter accedere a tale lista:

public class Club
{
  /// Collection of Person objects in the Club
  private List<Person> people = new List<Person>();
  public List<Person> People { get; set; }

  /// The Default property of the Club object
  public Person this[int index]
  {
    get { return people[index]; }
    set { people[index] = value; }
  }
}

public class Person
{
  private string _name;
  public Person(string name)
  {
    _name = name;
  }
  public string Name {get; set;}
}

In questo modo posso correttamente scrivere il seguente codice:

Club club = new Club();
club.People.Add(new Person("Chris"));
// Cambio il nome della prima persona usando il metodo tradizionale
club.People[0].Name = "Joe";
// Cambio il nome della prima persona usando il metodo tradizionale usando la default property
club[0].Name = "John";

Come per ogni altro metodo di una classe, anche queste particolari proprietà possono subire un overload, posso quindi avere un accesso tramite indice con un intero e anche con una stringa, la quale potrebbe fare, per esempio, un dictionary lookup.

Indice

Share
Ultimi articoli
Join

Newsletter

Nessuno spam, solo articoli interessanti ;)

Focus

Post correlati

semaphoreslim

SmaphoreSlim 101

SemaphoreSlim è una classe che permette la sincronizzazione di n thread che hanno una risorsa (scarsa) condivisa limitandone l’uso ad un numero massimo.

interlocked

Interlocked 101

La sincronizzazione dei thread è un elemento fondamentale nella programmazione asincrona, ne ho infatti parlato in vari post. La soluzione più versatile è sicuramente utilizzare

event

Come testare gli eventi

Testare che degli eventi siano stato effettivamente lanciati in C# non è immediato. Tipicamente è possibile testare che un evento venga lanciato aspettando un ManualResetEvent

Codice Pragmatico

Contatti

Per informazioni, dubbi o consulenze non esitate a contattarmi.

Lascia un messaggio

Ricevi le ultime news

Iscrivi alla newsletter

Solo articoli interessanti, promesso ;)