ich verstehe den Unterschied zwischen einer virtuellen und normalen Methode nicht.
Habe ich eine Basisklasse mit viruellen Methoden, kann ich diese in den Kindklassen überschreiben. Bei abstrakten Methoden MUSS ich diese hingegen überschreiben.
Aber ich kann doch auch normale public-Methoden in Kindklassen überschreiben.
Wo ist da jetzt der Unterschied?
Warum soll ich virtual davor schreiben, wenns auch so geht?
Hi,
Du hast die Klasse „Tier“, diese Klasse ist die Basisklasse für die Klasse „Hund“ und „Katze“. Wenn du nun in Tier die virtuelle Methode getAnimal(); geschrieben hast, kannst du diese in den Kindklassen überschreiben. Wenn du aber nun eine Kindklasse „Terrier“ erstellst, die von Hund ableitet kannst du getAnimal(); nicht überschreiben.
Der Sinn ist von bestimmten Klassen manche Methoden zu schützen.
Lg der einzigware
sorry, aber das ist Unsinn. Vielleicht verwechselst du das mit sealed,protected oder internal-Methoden.
Kompiliere das Ganze mal und du wirst feststellen, dass virtuelle Methoden in erster Linie dazu da sind damit die Methoden der abgeleiteten Klasse Vorrang vor der gleichen Methode der Basisklasse hat.
Gruss
Joey
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test
{
class tier
{
public virtual string getAnimal()
{
return "Ich bin ein Tier";
}
}
class Hund:tier
{
public override string getAnimal()
{
return "Ich bin ein Hund";
}
}
class Terrier: Hund
{
public override string getAnimal()
{
return "Ich bin ein Terrier";
}
}
class Program
{
static void Main(string[] args)
{
tier dasTier = new tier();
Console.WriteLine( dasTier.getAnimal());
Hund derHund = new Hund();
Console.WriteLine(derHund.getAnimal());
Terrier derTerrier = new Terrier();
Console.WriteLine(derTerrier.getAnimal());
tier dasHundTier = new Hund();
Console.WriteLine(dasHundTier.getAnimal());
tier dasTerrierTier = new Terrier();
Console.WriteLine(dasTerrierTier.getAnimal());
Hund derTerrierHund = new Terrier();
Console.WriteLine(derTerrierHund.getAnimal());
Console.ReadLine();
}
}
}