| 

.NET C# Java Javascript Exception

7
Echte OOP-Sprachen unterstützten die Mehrfachvererbung, d.h. eine Klasse kann von mehr als einer Klasse abgeleitet werden und einhergehend damit die Merkmale unterschiedlicher Objekte zusammenführen. In Visual Basic geht sowas bislang leider nicht, d.h. eine Klasse kann immer nur von einer Klasse abgeleitet werden. Bedeutet das, das ich, wenn ich unterschiedliche Funktionsmerkmale in einer neuen Klasse zusammenführen will, diese ausschließlich über getrennte Interfacese vordefinieren muss und dann diese Interfaces in der neuen Klasse implementiere (was natürlich erheblich viel mehr Arbeit macht)? Wird es Mehrfachvererbung in VS 2011 auch für VB geben?
29.10.2011
OopMan 41 3
4 Antworten
4
Soweit mir bekannt wurde seinens Microsoft in NET ganz bewusst auf Mehrfachvererbung verzichtet.
Nach meiner Erfahrung wurde in der Vergangenheit (C++) Mehrfachvererbung sehr selten genutzt und hat dann recht oft zu Mehraufwand und Verwirrung statt zu Arbeiterleichtering geführt.
Aus Sicht der Wartbarkeit ist Mehrfachvererbung nicht der Brüller, denn z.B.:
Auch wenn der Ersteller der Software Mehrfachvererbung perfekt verstanden und implementiert hat, ist nicht gesagt (und häufig genau so gewesen) das sein Nachfolger die Mehrfachvererbung
nicht verstanden / anders interpretiert hat als geplant.
Dann bricht das Chaos ganz schnell aus....

Ich komme blendend ohne Mehrfachvererbung aus und obwohl es Situationen gibt in denen ich diese anwenden könnte bin ich in Summe mit Microsofts Entscheidung einverstanden.
29.10.2011
Richard 391 7
2
Die Sache mit den Interfaces, die du ansprichst, habe ich mit ExtensionMethods "ansatzweise" lösen können.

Du definierst dir dazu die besagten (leeren) Interfaces:
public interface IClone<T> { }
public interface IValidate { }


und "verweist" diese in deiner Klasse
public class MyClass : IClone<MyClass>, IValidate
{
public string Name { get; set; }
}


Die eigentliches Implementierung findet dann in einer Extensionmethod statt:
public static class ExtensionMethods
{
public static T Clone<T>(this IClone<T> origínal)
{
T clone = Activator.CreateInstance<T>();
return clone;
}
public static bool Validate(this IValidate obj)
{
//...
return true;
}
}


auf der du dann wie folgt zugreifen kannst:
static void Main(string[] args)
{
MyClass myClass = new MyClass();
myClass.Clone<MyClass>();
var isValid = myClass.Validate();
}


Ich hoffe, das hilft dir bei deinem Vorhaben etwas weiter ;)
29.10.2011
Mario Priebe 6,0k 3 9
0
Nö. Das wird es ziemlich sicher nicht geben :)
29.10.2011
michlG 1,7k 1 5
0
Hallo zusammen,

korrigiert mich bitte, aber das ganze sollte dann über eine abstrakte Klasse geregelt werden.

Public MustInherit Class Fahrzeug
Public Sub Einschalten()
MotorAnlassen()
End Sub

Public MustOverride Sub LosGehts()

End Class


Public Class Flugzeug
Inherits Fahrzeug


Public Overrides Sub LosGehts()
FliegeFlugzeug()
End Sub
End Class

Public Class Auto
Inherits Fahrzeug

Public Overrides Sub LosGehts()
FahreAuto()
End Sub
End Class


Zusätzliche spezielle Methoden dürfen dann auch über Interfaces erweitert werden.

Gruß Karl

PS: Das große Problem der Mehrfachvererbung ist auch als Diamond-Problem bekannt. Siehe dazu auch http://de.wikipedia.org/wiki/Diamond-Problem
04.11.2011
Karl 958 8

Stelle deine Oop-Frage jetzt!