AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language C# Unterschied zwischen new virtual und override
Thema durchsuchen
Ansicht
Themen-Optionen

Unterschied zwischen new virtual und override

Ein Thema von faux · begonnen am 5. Jan 2006 · letzter Beitrag vom 5. Jan 2006
Antwort Antwort
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#1

Unterschied zwischen new virtual und override

  Alt 5. Jan 2006, 14:56
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
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#2

Re: Unterschied zwischen new virtual und override

  Alt 5. Jan 2006, 15:37
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
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Unterschied zwischen new virtual und override

  Alt 5. Jan 2006, 16:02
Danke für die Antwort.
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 Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Unterschied zwischen new virtual und override

  Alt 5. Jan 2006, 16:11
Sorry, falscher Button. (Zitat statt Edit)
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Benutzerbild von tomsel
tomsel

Registriert seit: 8. Dez 2005
Ort: am Chiemsee
304 Beiträge
 
Delphi 7 Professional
 
#5

Re: Unterschied zwischen new virtual und override

  Alt 5. Jan 2006, 16:17
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).
Ein Experte ist ein Mann, der hinterher genau sagen kann, warum seine Prognose nicht gestimmt hat. (Winston Churchill)
  Mit Zitat antworten Zitat
Benutzerbild von faux
faux

Registriert seit: 18. Apr 2004
Ort: Linz
2.044 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Unterschied zwischen new virtual und override

  Alt 5. Jan 2006, 16:34
OK. Jetzt ist mir alles klar.

Danke euch beiden!

Grüße
Faux
Faux Manuel
Wer weiß, dass er nichts weiß, weiß mehr, als der der nicht weiß, dass er nichts weiß.
GoTrillian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:03 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