Stránka 1 z 1

[C#] Ekvivalent Delphi "reintroduce"

Odeslat příspěvekNapsal: 17. 1. 2011 16:07
od BEZY
Existuje v C# ekvivalent klíčového slova v Delphi reintroduce? Jedná se o to, že mám v rodičovské třídě nějakou metodu (třeba Init() ) a v dědící třídě chci mít stejnou metodu, ale např. s extra parametrem Init(param) ale už nechci, aby bylo z venku možné volat původní Init() ale pouze ten nový...

Re: [C#] Ekvivalent Delphi "reintroduce"

Odeslat příspěvekNapsal: 17. 1. 2011 16:21
od Falhar
Vzhledem k tomu, že C# podporuje přetěžování metod, tak nevidím důvod, proč by takovýto modifikátor existoval.
Pokud něco takového vyžaduješ, tak máš nejspíš něco špatně s návrhem tvých tříd. Jedinnou možností, jak toto udělat je využít konstruktorů, které takovéto chování přímo vyžadují.

Re: [C#] Ekvivalent Delphi "reintroduce"

Odeslat příspěvekNapsal: 17. 1. 2011 16:30
od BEZY
Přetěžování samozřejmě znám - to mi ale nezastíní metodu v rodičovské třídě

V Delphi jsem např. často používal reintroduce u Formů a metody Show(Modal) - potřebuji předat data formuláři při jeho zobrazení - tak si napíšu vlastní ShowModal(...) se svými parametry a použitím klíčového slova reintroduce se původní ShowModal() zastíní - protože nechci, aby se mi zobrazil prázdný formulář.

Že to tak je u konstruktorů vím, ale těm jsem se chtěl pro toto vyhnout..

Re: [C#] Ekvivalent Delphi "reintroduce"

Odeslat příspěvekNapsal: 17. 1. 2011 16:33
od Falhar
Osobně bych v tomto případě šel cestou jiného názvu metody.
Nebo by šlo využít virtuálních metod a nepředávat jako parametr metody, ale jako property objektu.

Re: [C#] Ekvivalent Delphi "reintroduce"

Odeslat příspěvekNapsal: 17. 1. 2011 18:10
od Nargon
Tohle zde neni, protoze jazyk s touto funkci uz neni Objektovy. A C# je striktne objektove. Tohle totiz porusuje pravidlo dedicnosti, kdy potomek ma mit vsechny metody rodice.
Ale jakmile tohle zavedes, tak uz u potomka nemusi byt pristupne metody rodice.