Hi,
habe da mal eine Verständnisfrage:
Mit sealed kann man ja bei abgeleiteten Klassen eine weitere Vererbung verhindern.
Wenn ich sealed aber in der Basisklasse verwenden möchte, dann meckert er.
Kann man auch die Methode einer Basisklasse für eine Vererbung sperren?
Hintergrund:
Ich möchte in einer vererbten Klasse die Methode einer Basisklasse nicht aufrufbar machen.
Vielen Dank und beste Grüße
Solick
Vielleicht versteh ich dich ja einfach nur falsch, aber:
private ?
Nein, wenn ich die Methode in der Basisklasse private deklariere kann ich sie ja nie durch das Objekt aufrufen.
Ich geb mal ein Beispiel:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
foo1 f1 = new foo1("foo1");
foo2 f2 = new foo2("foo2", "foo1");
f1.printIt();
f2.printIt(false);
f2.printIt(true);
f2.printIt();
Console.ReadKey();
}
}
class foo1
{
protected String _str;
public foo1(String str)
{
_str = str;
}
public void printIt()
{
Console.WriteLine("Str: " + _str);
}
}
class foo2 : foo1
{
String _str2;
public foo2(String str2, String str) : base(str)
{
_str2 = str2;
}
public void printIt()
{
Console.Write("foo2 -Str: " + base._str);
}
public void printIt(bool b)
{
if (b)
{
Console.WriteLine("Str2: " + _str2);
}
else
{
Console.Write("Str: " + base._str);
}
}
}
}
f2.printIt() soll verhindert werden.
Beste Grüße
solick
Vererbung bedeutet, dass alle Funktionen der Basisklasse übernimmst und erweiterst. Das ist das Prinzip der Vererbung.
Wenn du auf so eine Funktion angewiesen bist solltest du deine Architektur nochmal überdenken. Das sind allerdings Grundlagen.
Hi solick,
ich denke, mabo hat alles dazu gesagt, was dazu zu sagen ist. Auch eine abstrakte Klasse ändert daran nichts. Bitte schau dir dazu mal die entsprechenden Kapitel im OpenBook (🛈 ) an oder in der Dokumentation auf MSDN, dann erübrigen sich solche Nachfragen von ganz allein.
Christian
Weeks of programming can save you hours of planning
Korrekt, das Problem ist hier der falsche Ansatz. Vererbung ist immer Spezialisierung im Sinne von Erweiterung und nicht von Einschränkung. Dagegen sollte man nicht verstoßen, sonst verletzt man das Liskovsches Substitutionsprinzip. Allerdings fällt das ganze unter [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 1.1.