Hallo,
ich möchte fragen, ob es möglich ist eine Methode bzw. Property zu überschreiben, obwhol sie in der Basisklasse nicht mit override deklariert wurde.
Till
Guten Abend!
Stichwort "new-Modifizierer" in der SDK-Dokumentation.
HoGi
2b | !2b = 0xff
Hallo till_hm,
überscheiben im OOP Sinne kannst du sie dann leider nicht. new ist kein vollwertiger Ersatz.
herbivore
Herbivore hat völlig recht mit der Aussage, das new kein vollwertiger Ersatz ist. Jedoch erscheint der Vorschlag von HoGi(Verwendung von new) die einzige Möglichkeit zu sein, wenn die Basis tabu ist(ist sie das?).
Wenn ich mich recht entsinne, ist das Problem dabei, dass du dann "auf eine Implementierung" und nicht "auf eine Schnittstelle" programmieren musst. Du kannst also nicht so machen:
BaseClass instance=new DerivedClass();
instance.NotOveridableMethod();
Dabei wird dann nämlich die Original-Implementierung aufgerufen. Du musst also so machen:
DerivedClass instance=new DerivedClass();
instance.NotOveridableMethod();
Das bringt aber die Polymorphie gewaltig durcheinander.
(Falls das nicht stimmt, bitte drauf hinweisen!)
A wise man can learn more from a foolish question than a fool can learn from a wise answer!
Bruce Lee
Populanten von Domizilen mit fragiler, transparenter Außenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
Wer im Glashaus sitzt, sollte nicht mit Steinen werfen.
Hallo progger,
das ganze ist eher so gedacht:
public class BaseC
{
public int x;
public void Invoke() {}
}
public class DerivedC : BaseC
{
new public void Invoke() {
/* Edit */
base.Invoke();
}
}
Das Beispiel ist aus der SDK-Dokumentation (Edit) und ein wenig erweitert.
HoGi
2b | !2b = 0xff
Hallo progger,
du liegt richtig.
Hallo HoGi,
dein Beispiel verstehe ich nicht. Es zeigt ja nur, wie man new verwendet. Das Problem ist ja, dass es nicht so wirkt wie override und das hat progger in sein Beispiel deutlich gemacht.
Hallo zussammen,
bei override wäre in beiden Fällen korrekterweise DerivedClass.NotOveridableMethod aufgerufen worden (die dann natürlich besser OveridableMethod heißen würde).
Das Problem ist, dass bei new der statische Typ der Variable entscheidet, welche Methode aufgerufen wird. Das einzig korrekte ist aber, dass der dynamische Typ des Objekts entscheiden müsste.
herbivore
Jetzt hat es "geklickt" worauf herbivore und progger hinaus wollten.
Ich muß zu meiner Schade gestehen, dass ich gar nicht soweit gedacht
hatte.
Tückisch ...
Gruß
HoGi
2b | !2b = 0xff