V tomto případě je jedno, jestli používáte this["klíč"] nebo base["klíč"]. Vy v té poděděné třídě nemáte nikde deklaraci toho indexeru. Možná to bude zřejmější na tomto příkladě:
public class A {
public virtual void Test() {
Console.WriteLine("test");
}
}
public class B : A {
public void JinaMetoda() {
// všechna tato volání jsou stejná
this.Test();
base.Test();
Test();
}
}
Protože ve třídě B nepřepisujete metodu Test klíčovým slovem override, je jedno, jestli zavoláte this.Test() nebo base.Test(). Pořád je to ta samá metoda. U indexeru je to stejné, indexer je jenom speciální property, tedy dvojice metod:
public string this[string key] {
get { ... }
set { ... }
}
Pokud ho přes override nepřepíšete ve vaší třídě, pak můžete volat this[""] i base[""] a je to stejné. Obecně je zvyklostí volat base, abyste naznačili, že je to poděděná metoda a ne metoda v té třídě. U metod a vlastností je navíc zvyklost to "this." ani nepsat, jen to otravuje a znepřehledňuje kód. U indexeru se napsat musí, to je jediná výjimka.
|