.net die Mehrfache Vererbung von abstrakten Klassen
ist es möglich um diese Funktionalität zu implementieren?
Ich habe zwei abstrakte Klassen, und ich will Kraft
eine Dritte Klasse zu implementieren, die alle abstrakten Methoden in den beiden Klassen
public abstract class A
{
private void MethodA()
{
var fool = Prop*2;
}
public abstract int Prop { get; }
}
public abstract class B
{
private void MethodB()
{
//....
SomeMethod();
//....
}
public abstract void SomeMethod();
}
public class C: A, B
{
public int Prop { .... }
public void SomeMethod { .... }
}
Das größte problem hier ist, dass die umgesetzten Finale Klasse Methoden werden dann im base-abstrakte Klassen, und dies erreicht man nicht mit Schnittstellen. Es gibt also keinen workaround?
Habe ich gelesen, dass viele ähnliche q/a, aber nichts reagiert auf mein problem.
Dank
- Claudio sagte, Mehrfachvererbung ist nicht erlaubt. Hier ist eine gute Lektüre zu dem Thema: blogs.msdn.com/b/dachou/archive/2008/04/17/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, C# keine Mehrfachvererbung. Sie konnte mehrere interfaces implementieren, aber das ist offensichtlich nicht die gleiche, da Schnittstellen können keine konkreten Verhalten umgesetzt.
Können Sie diese in C# via Mixins in Verbindung, es ist anders implementiert als Mehrfachvererbung, aber am Ende bekommen Sie ein Objekt mit den Methoden aus mehreren Klassen.
Es ist nicht eine Funktion der Sprache, aber es kann gefunden werden im Dritten.
Lesen Sie über es auf meine Antwort auf diese Frage, oder direkt auf re-mix ist codeplex
Ein paar Punkte von Interesse:
- Sie können überschreiben von Methoden in einer Mixin, also extern ändern das Verhalten des neu erstellten Klassen.
- Sie können Bereiche erstellen, in denen Klassen sind unterschiedlich, während innerhalb des Bereichs.
- Sie erstellen müssen mixin würd Objekte über eine factory (new MyObject() nicht nehmen, Mixins in Verbindung zu berücksichtigen, zum Glück).
Haben Sie versucht, mit mehreren Schnittstellen statt? Dies ist möglicherweise eine ähnliche situation:
Mehrere abgeleitete abstrakte Klassen?
Dass speziell? Nein, da Mehrfachvererbung nicht unterstützt in C#.
Die nächstgelegene Sie bekommen könnte wäre mit einem interface kombiniert, dass zwei andere:
Dann könnte man verlangen, Argumente vom Typ
ICombined
, aber das ist nicht ganz das bekommen, was Sie suchen. Zum Beispiel, wenn ich wurden, um dies zu tun:Dies würde nicht qualifizieren, da ich nicht explizit implementieren das kombinierte Schnittstelle, nur die beiden Schnittstellen, die es zusammensetzt.
Wenn Sie bereit sind, die Funktionalität implementieren, die in der letzten Klasse können Sie erstellen Schnittstellen und implementieren so viele wie Sie wollen...