2013-01-03 18 views
8

Ho appena visto questo in un progetto C#:sintassi “Strano” C# proprietà

public char this[int index] 

mi considero di nuovo da C#; qualcuno può aiutare cosa significa?

+3

"Mi considero nuovo in C# chiunque può aiutare cosa significa in C++" Aspetta, cosa? – BoltClock

+2

@BoltClock Una persona C++ ha visto questo in C#? – Shark

+2

@Shark: È quello che ho pensato anche io - ma solo dopo un doppio take. – BoltClock

risposta

15

È un indicizzatore.

Gli indicizzatori consentono di indicizzare le istanze di una classe o di una struttura, come gli array . Gli indicizzatori assomigliano alle proprietà eccetto che i loro accessor richiedono i parametri . Un indicizzatore fornisce una sintassi simile a una matrice. Consente a un tipo di accedere a allo stesso modo di un array. Proprietà come gli indicizzatori spesso accedono a un backing store . Accettiamo spesso un parametro di tipo int e accediamo a un backing store di tipo array.

leggerlo da http://www.dotnetperls.com/indexer

string s = "hello"; 
Console.WriteLine (s[0]); // 'h' 
Console.WriteLine (s[3]); // 'l' 

Implementazione di un indicizzatore

Per scrivere un indicizzatore, definire una proprietà chiamata tale, specificando gli argomenti in piazza parentesi. Per esempio:

class Sentence 
{ 
    string[] words = "The quick brown fox".Split(); 
    public string this [int wordNum] // indexer 
    { 
     get { return words [wordNum]; } 
     set { words [wordNum] = value; } 
    } 
} 

Ecco come potremmo utilizzare questo indicizzatore:

Sentence s = new Sentence(); 
Console.WriteLine (s[3]); // fox 
s[3] = "kangaroo"; 
Console.WriteLine (s[3]); // kangaroo 

Uno stesso tipo può dichiarare più indicizzatori, ognuno con parametri di tipo diverso. Un indicizzatore può anche prendere più di un parametro:

public string this [int arg1, string arg2] 
{ 
    get { ... } set { ... } 
} 

indicizzatori compilare internamente per metodi chiamati get_Item e set_Item, come segue:

public string get_Item (int wordNum) {...} 
public void set_Item (int wordNum, string value) {...} 

Il compilatore sceglie il nome Item di default-si può effettivamente cambia questo decorando il tuo indicizzatore con il seguente attributo:

[System.Runtime.CompilerServices.IndexerName ("Blah")] 
7

che è chiamato un indicizzatore . Maggiori informazioni su di loro at MSDN.