2016-07-07 8 views
-2

Was geht hier eigentlich auf:Kann jemand diese C# -Syntax erklären?

public decimal[] Coefficients; 
public decimal this[int i] 
{ 
    get { return Coefficients[i]; } 
    set { Coefficients[i] = value; } 
} 

Was bedeutet die this dienen als? Ist es eine Art Erweiterung für die decimal?

+5

Wenn Ihre Klasse MathTest heißt, dann können Sie von uns auf das interne Koeffizientenarray zugreifen MathTest [i] anstelle von MathTest.Coefficients [i]. Siehe http://stackoverflow.com/questions/1307354/c-sharp-indexer-usage und http://stackoverflow.com/questions/2185071/real-world-use-cases-for-c-sharp-indexers – ManoDestra

+1

Warum? die downvotes .. – PreqlSusSpermaOhranitel

+1

Keine Ahnung. Ich habe dich aufgewertet. Die Frage scheint mir klar genug zu sein. Vielleicht eher schlecht erforscht, da es sich um eine grundlegende Sprachsyntaxfrage handelt, aber immer noch gültige IMO. – ManoDestra

Antwort

11

Es ist ein Indexer.

Mit Indexern können Instanzen einer Klasse oder Struktur wie Arrays indiziert werden. Indexer ähneln Eigenschaften, außer dass ihre Accessoren Parameter verwenden.

Beispiel aus der verknüpften MSDN:

class SampleCollection<T> 
{ 
    // Declare an array to store the data elements. 
    private T[] arr = new T[100]; 

    // Define the indexer, which will allow client code 
    // to use [] notation on the class instance itself. 
    // (See line 2 of code in Main below.)   
    public T this[int i] 
    { 
     get 
     { 
      // This indexer is very simple, and just returns or sets 
      // the corresponding element from the internal array. 
      return arr[i]; 
     } 
     set 
     { 
      arr[i] = value; 
     } 
    } 
} 

// This class shows how client code uses the indexer. 
class Program 
{ 
    static void Main(string[] args) 
    { 
     // Declare an instance of the SampleCollection type. 
     SampleCollection<string> stringCollection = new SampleCollection<string>(); 

     // Use [] notation on the type. 
     stringCollection[0] = "Hello, World"; 
     System.Console.WriteLine(stringCollection[0]); 
    } 
} 
// Output: 
// Hello, World. 
2

Haben Sie sich jemals gefragt, wie List<T> 's myList[i] funktioniert in C# genau wie ein Array?

Die Antwort ist in Ihrer Frage. Die von Ihnen gepostete Syntax ist ein syntaktischer Zucker, den der Compiler in Eigenschaften namens get_Item(int index) und set_Item(int index, decimal value) umwandelt. Es wird beispielsweise in List<T> verwendet, um auf das in der Klasse verwendete interne Array zuzugreifen und das Element am angegebenen Index (set oder get) zurückzugeben. Diese Funktion wird genannt.

Um zu testen, dass dich selbst, versucht, eine Methode mit derselben Signatur zu erstellen:

Fehler CS0082: Typ 'MyClass' bereits behält ein Mitglied

public decimal get_Item(int i) 
{ 
    return 0; 
} 

Sie erhalten einen Compiler-Fehler 'get_Item' mit den gleichen Parametertypen

Verwandte Themen