Es gibt keine [][]
Betreiber. Was tatsächlich passiert, ist, dass der zweite []
arbeitet mit der Variablen, die von der ersten []
. Da es diese Funktion bereits gibt, würde es zu Unklarheiten führen, wenn es eine [][]
Betreiber.
Ein Beispiel: Nehmen wir an, Sie haben eine Variable x
in irgendeiner Form T
.
T x = new T();
Wenn wir die []
Operator, sagen wir eine Variable eines anderen Typs Q
zurückgegeben wird:
Q y = x[0];
Und dann mit der []
Operator auf eine Variable vom Typ Q
könnte eine Variable des Typs R
:
R z = y[0];
Deshalb x[][]
gibt eine Variable des Typs R zurück.
Nehmen wir an, wir wären tatsächlich in der Lage, eine Überlastung [][]
für den Typ T so, dass er einen Typ S zurückgibt:
S a = x[0][0];
Der Compiler hätte keine Möglichkeit zu wissen, ob er die [][]
Betreiber von x
um einen Typ zurückzugeben S
Variable, oder verwenden Sie die []
Operator zweimal hintereinander, um einen Typ zurückzugeben R
variabel. Dies ist die Zweideutigkeit, die ich oben erwähnt habe.
Ihr bester Tipp wenn Sie keine eckigen Klammern verwenden möchten ist zu haben operator[]
eine Variable zurückgeben, die ebenfalls den []
überladen (oder vielleicht eine Variable desselben Typs mit einem gesetzten Flag), und diese anfänglich zurückgegebene Variable soll sich mit der zweiten []
.
Aber die beste Lösung ist hier (wie bereits in eine weitere Antwort ) ist die Verwendung eines anderen Operators wie ()
.