Frage

Ich möchte den Einsatz von wenigen Methoden paar meiner alten getesteten Klassen in meine neue Klasse machen, die ich baue. Leider hat C # keine Mehrfachvererbung unterstützen. Wie Wiederverwendung ich Code aus diesen alten Klassen? Erstelle ich sie nur als Mitglied Objekte? oder muss ich alle anderen Optionen?

War es hilfreich?

Lösung

Im Allgemeinen Zusammensetzung anstelle der Vererbung ist der richtige Weg, ja. Wenn Sie ein konkretes Beispiel für die Art der Sache geben könnte man meinen, das wäre es leichter zu helfen, den geeigneten Ansatz zu finden, obwohl. Es ist nicht immer die gleiche

Andere Tipps

sie als Mitglied Verwendung von Objekten sollte eine gute Idee sein. Dann können Sie auch nur die Methoden von Interesse aussetzen, und passen sie bei Bedarf.

Sie können neu erstellen dann als Erweiterungsmethoden, wenn sie auf die gleiche Art zu arbeiten.

public static void MyMethod( this MyType target ){}


MyType.MyMethod()

, wie unten erwähnt, wenn Sie eine Klasse, die von MyType oder häufiger implementiert die Schnittstelle der Erweiterungsmethode arbeitet auf leitet, arbeitet die Erweiterung für die.

public class MyDerived : MyType{}

MyDerived.MyMethod()

Technisch, C # implementiert mehr Schnittstelle inheritence, aber nicht mehrere Implementierung inheritence.

Das Problem mit mehrere Implementierung inheritence ist, dass es führt zu Situationen wie der Diamant Problem .

Sie können mehrere Implementierung inheritence mit mehreren Schnittstellen simulieren inheritence und Komposition, die zu schließen ist, was Sie beschrieben, wie die Schaffung die Objekte, die Sie wiederverwenden wollen „als Mitgliedsobjekte“. Was Sie nicht wollen, zu tun, aber unnötiges Verhalten ist von Ihrem umschlossenen Typ aus.

Im Anschluss ist ein Klassendiagramm das Grundprinzip von mehreren zeigt inheritence durch Zusammensetzung:

Mehrfachvererbung http://www.freeimagehosting.net/uploads/cb219cefba.jpg

Der Nachteil dabei ist, dass alle Änderungen an der Schnittstelle IBreeper erfordern entsprechende Änderungen an Breeper, und vice versa.

einen Schritt zurück, obwohl Einnahme - Sie müssen die Gründe sorgfältig suchen Zusammensetzen der alten Klassen. Ist es an:

  1. Erweitern oder das Verhalten bestehende intensivieren. Sie sollten dann prüfen, die Proxy Pattern ;

  2. Erstellen Sie eine "One-Stop-Shop" für alle Ihre Verhalten. Sie sollten wirklich tun dies nur, wenn Ihr SuperFuddler ist bindigen (das heißt, alle freiliegenden Verhalten ausgerichtet ist), sonst werden Sie in eine Gott Objekt Situation, die nicht förderlich ist wartbar ist;

  3. eine Schnittstelle darstellen, die mit einer Art der Verwendung durch eine bestimmte Klasse von Kunden Ihres SuperFuddler erforderlich konsistenter ist. In diesem Fall sollten Sie den Adapter Pattern betrachten.

Sie können gefälschte es ziemlich leicht wie folgt aus:

public interface IFoo {
    void DoFoo();
}

public class Foo : IFoo {
    public void DoFoo() { Console.Write("Foo"); }
}

public class Bar {
    public void DoBar() { Console.Write("Bar"); }
}

public class FooBar : IFoo, Bar {
    private IFoo baseFoo = new Foo();
    public void DoFoo() { baseFoo.DoFoo(); }
}

//...

FooBar fooBar = new FooBar();

fooBar.DoFoo();
fooBar.DoBar();

, wenn man sie als eine Komponente entwickelt haben, nutzen sie von ihnen nicht erben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top