Klassen-Methode mit new überschreiben

30/06/2008 - 13:50 von Stephan | Report spam
Hallo zusammen,

ich bin neulich darauf aufmerksam geworden, dass man eine Methode (in meinem
Fall die Add Methode einer List) mit "public new void Add" überschreiben kann.
Dort könnte ich eigenen Code (z.B. ein Log) ausführen und danach mit
"base.Add" ein Element an die eigentliche Liste hàngen.
Das funktioniert auch alles wirklich prima, was ist aber bei diesem Vorgehen
der Nachteil/Vorteil ??? Für was brauche ich noch virtual und override, wenn
ich jede Methode auf diese Art überschreiben kann.

Danke und Grüße
Stephan
 

Lesen sie die antworten

#1 Frank Dzaebel
30/06/2008 - 14:19 | Warnen spam
Hallo Stephan,

ich bin neulich darauf aufmerksam geworden, dass man eine Methode (in meinem
Fall die Add Methode einer List) mit "public new void Add" überschreiben kann.
Dort könnte ich eigenen Code (z.B. ein Log) ausführen und danach mit  
"base.Add" ein Element an die eigentliche Liste hàngen.
Das funktioniert auch alles wirklich prima, was ist aber bei diesem Vorgehen
der Nachteil/Vorteil ??? Für was brauche ich noch virtual und override, wenn
ich jede Methode auf diese Art überschreiben kann.



Prinzipiell ist ein Ausblenden eines Members mit
"new" IMHO als ~gefàhrlich zu betrachten, um die
Basisfunktionalitàt zu emulieren. Nur wenn virtual
angegeben ist, ist das vom Basisklassen-Entwickler so vorgesehen.

Zwar *kann* das durchaus hinhauen (wie in Deinem Fall)
aber:
- etwa der Zeitpunkt des Member-Aufrufs kann falsch sein.
- intern wird ggf. immernoch die base.Add Methode
aufgerufen, ohne Deine neue Funktionalitàt zu
zu berücksichtigen.
- Änderungen im Basisklasse (etwa durch neues Framework)
können die Funktionalitàt wieder zunichte machen.

Wir hatten gerade letztens so eine Fall, wo
jemand im DataGridView versuchte, Enabled
mit "new" zu überblenden. Das klappte so
gar nicht (aus erwàhnten Gründen). Man beachte,
der Basisklassen-Entwickler wusste nichts von
dieser neuen Funktion und sie trotzdem ggf.
mehrfach aufgerufen ;-)

[new-Modifizierer (C#-Referenz)]
http://msdn.microsoft.com/de-de/lib...f1dw2.aspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen