In C# muss jede Methode, die Sie von der Basisklasse überschreiben möchten, abstract
, virtual
oder override
selbst sein. Das neue Keyword führt keine Überschreibung durch. Es funktioniert irgendwie anders:
Wenn Sie eine Funktion mit dem new-Schlüsselwort deklarieren und die Funktion einer Basisklasse ausblenden, wird diese Implementierung nur verwendet, wenn Sie ein Objekt desselben Kindtyps haben. Beispiel:
class TopClass
{
public String getHello()
{
return "Hello";
}
public virtual String getWorld()
{
return "World";
}
}
class ChildClass : TopClass
{
public new String getHello()
{
return "Hi";
}
public override string getWorld()
{
return "Earth";
}
}
Dies führt zu:
TopClass tc = new TopClass();
Console.WriteLine(tc.getHello() + " " + tc.getWorld()); // Hello World
ChildClass cc = new ChildClass();
Console.WriteLine(cc.getHello() + " " + cc.getWorld()); // Hi Earth
TopClass tc2 = new ChildClass();
Console.WriteLine(tc2.getHello() + " " + tc2.getWorld()); // Hello Earth
Console.ReadLine();
Sie den Unterschied des neuen Keywords im Vergleich sehen können zu einer typischen Überschreibung: Wenn die abgeleitete Klasse zu einem Eltern Classtype gegossen wird, das übergeordnete Funktionen (Earth anstelle von World zurückgeben) werden weiterhin wirksam sein, während die neuen Funktionen nicht funktionieren (Hi wird NICHT anstelle von Hello zurückgegeben).
Kurze Antwort: Nein –
Wahrscheinlich ist diese Verwendung von 'new' in C# zu vermeiden. Vielleicht wäre es besser, neu zu gestalten? – horgh