![]() |
Unterschied zwischen new virtual und override
Hallo!
Ich hätte mal ne Frage: Ich habe eine Klasse (zb Klasse1), die eine Methode (ich nenne die Methode mal Foo()) hat, welche virtual ist. Wenn ich jetzt eine andere Klasse (Klasse2) von Klasse1 ableite, kann ich jetzt die Methode Foo() entweder überschreiben (override) oder eine neue virtuelle Methode daraus machen (new virtual). Wo genau liegt hier der Unterschied? Zuerst dachte ich, dass man, wenn man die 1. Möglichkeit nimmt die Methode zu überschreiben, in einer Weiteren Ableitung die Methode nichtmehr erneut überschreiben kann, was aber trotzdem möglich ist. Wo also liegt hier der Unterschied? Beispiel:
Code:
Grüße
using System;
using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { public class Parent { public virtual void Foo() { Console.WriteLine("Parent"); } } public class Klasse1 : Parent { public override void Foo() /* <-- Hier könnte ich * anstatt von override * auch new virtual schreiben * */ { Console.WriteLine("Klasse1"); } } public class Klasse2 : Klasse1 { public override void Foo() { Console.WriteLine("Klasse2"); } } public class Program { static void Main(string[] args) { Klasse1 k1 = new Klasse1(); k1.Foo(); Klasse2 k2 = new Klasse2(); k2.Foo(); Console.ReadLine(); } } } Faux |
Re: Unterschied zwischen new virtual und override
moin faux,
wenn du
Code:
schreibst, wird diese Methode unabhängig von der Methode deiner Basisklasse.
new virtual
Quelle C# Programmierhandbuch, über welches du auch verfügst. I ch verstehe nicht, warum du hier einen Thread aufmachst, das dauert länger als in deiner Ide das Suchwort einzugeben. raik |
Re: Unterschied zwischen new virtual und override
Danke für die Antwort.
Zitat:
Denn
Code:
ist genau so möglich wie
public new virtual void Foo()
{ base.Foo(); /* Hier wird ja auf die Basisklasse * zugegriffen; Also ganz unabhängig * ist das dann noch nicht. * */ Console.WriteLine("Klasse1"); }
Code:
Grüße
public override void Foo()
{ base.Foo(); Console.WriteLine("Klasse1"); } Faux |
Re: Unterschied zwischen new virtual und override
Sorry, falscher Button. (Zitat statt Edit)
|
Re: Unterschied zwischen new virtual und override
Ja klar, natürlich kanst du in einer verdeckenden Methode genau wie in einer überschreibenden auf den gerbten Code zurückgreifen. Der eigentliche Unterschied besteht jedoch in der Auswahl einer der beiden Foo - Methoden beim Aufruf. Prinzipiell ist es so: Beim Verdecken hängt die Methodenauswahl von dem deklarierten Typ der Variablen ab, mittels der auf die Instanz zugegriffen wird. Bei überschriebenen Methoden ist die Auswahl vom dynamischen Typ der Instanz abhängig, der Typ der Objektvariablen ist dabei irrelevant (er muss nur zuweisungskompatibel sein).
|
Re: Unterschied zwischen new virtual und override
OK. Jetzt ist mir alles klar. ;)
Danke euch beiden! Grüße Faux |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz