Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C# Unterschied zwischen new virtual und override (https://www.delphipraxis.net/60341-unterschied-zwischen-new-virtual-und-override.html)

faux 5. Jan 2006 14:56


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:
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();
    }
  }
}
Grüße
Faux

kiar 5. Jan 2006 15:37

Re: Unterschied zwischen new virtual und override
 
moin faux,

wenn du
Code:
new virtual
schreibst, wird diese Methode unabhängig von der Methode deiner Basisklasse.

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

faux 5. Jan 2006 16:02

Re: Unterschied zwischen new virtual und override
 
Danke für die Antwort.
Zitat:

Zitat von kiar
wenn du
Code:
new virtual
schreibst, wird diese Methode unabhängig von der Methode deiner Basisklasse.

Kannst du mir ein Beispiel nennen?

Denn
Code:
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");
    }
ist genau so möglich wie
Code:
public override void Foo()
    {
      base.Foo();
      Console.WriteLine("Klasse1");
    }
Grüße
Faux

faux 5. Jan 2006 16:11

Re: Unterschied zwischen new virtual und override
 
Sorry, falscher Button. (Zitat statt Edit)

tomsel 5. Jan 2006 16:17

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).

faux 5. Jan 2006 16:34

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 18:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz