bin momentan am Suchen nach einer Lösung wie ich zu mehreren Klassen dieselben Methoden und Properties oder sonst was hinzufügen kann
Code von irgendeinem Fremdhersteller
public class BaseClass//irgendeine Basisklasse aus C#
{
}
public class AClass : BaseClass//von irgendwem erweiterte BaseClass
{
}
public class BClass : BaseClass//von irgendjemand anderem erweiterte BaseClass
{
}
Mein Code
public class myAClass : AClass
{
public void myMethod()
{
MessageBox.Show("Das ist meine Methode");
}
}
public class myBClass : BClass
{
public void myMethod()
{
MessageBox.Show("Das ist meine Methode");
}
}
Für myMethod() genügen als Grundlage alle in BaseClass implementierenden Dinge
myAClass und myBClass müssen aber aus systematischen Gründen von AClass und BClass abgeleitet werden
Gibt’s irgendeine Möglichkeit beiden Klassen AClass UND BClass um meine Methode myMethod() zu erweitern ohne dass ich den Code kopieren muss???
Schön wäre wenn ich BaseClass direkt erweitern könnte und AClass und BClass diese Erweiterung erben würden – das ist aber nur ein Traum…
geht nicht da der Code von BaseClass, AClass und BClass nicht verfügbar und zudem nicht mein Code ist
Da schauts in C# zappenduster aus oder???
Hab ich da irgendwas was übersehen wie man das machen könnte ohne kopierten Code???
Danke
Bernhard
Sorry, ich antworte Morgen vernünftig - hoffe das ist ok.
Also wenn dich dich jetzt richtig verstanden habe hast du 3 Klassen zur Verfügung welche du nicht verändern kannst, 2 Klassen erben von der dritten und du willst 2 gleiche Methoden in den beiden derivaten implementieren.
Mal ein paar Punkte:
Wieso? höchstwahrscheinlich liegt da ein grober Designfehler vor wenn du 2 gleiche Methoden in 2 Klassen mit gleicher Basis haben willst.
Wenn die Klassen nicht auf Instanzmember zugreifen kannste sie ja statisch machen demzufolge kannst du mithilfe von .net 3 und den Method Extensions eine statische Methode beiden Klassen ohne viel Aufwand hinzufügen.
Poste mal was du genau machen willst
mfg Markus
- Wenn die Klassen nicht auf Instanzmember zugreifen kannste sie ja statisch machen demzufolge kannst du mithilfe von .net 3 und den Method Extensions eine statische Methode beiden Klassen ohne viel Aufwand hinzufügen.
Danke Markus
das war der Tip des Tages
wusste nicht dass "Method Extensions" existieren
damit lässt sichs lösen
Bernhard
Entschuldige gestriges Posting...
Ich schlage vor:
Vorteil:
Die vorgeschlagenen Extensions können auch über Helperklassen gelöst werden(mehr sind diese Extensions auch nicht).
Noch eine Möglichkeit wäre eine Klasse zu erstellen, in der alle Methoden sind, die beide Klassen beinhalten sollen und davon dann die beiden anderen abzuleiten. Ist imho einfacher als der ganze andere Kram. Ob das nun so der beste Weg ist weiß ich nicht, da ich so etwas bisher nicht machen musste.
Noch eine Möglichkeit wäre eine Klasse zu erstellen, in der alle Methoden sind, die beide Klassen beinhalten sollen und davon dann die beiden anderen abzuleiten. Ist imho einfacher als der ganze andere Kram. Ob das nun so der beste Weg ist weiß ich nicht, da ich so etwas bisher nicht machen musste.
Soweit ich das verstanden habe, kann er das nicht, da die 3 Klassen vorgegeben sind und er diese nicht verändern kann: BaseClass, AClass, BClass.
Er hat nun 2 eigene Klassen, die einmal von AClass und einmal von BClass erben und er will beide um eine gemeinsame Funktionalität erweitern.
Was hingegen sicher funktioniert und wahrscheinlich auch schöner ist ist der Vorschlag von ikaros:
Entschuldige gestriges Posting...
Ich schlage vor:
- definiere einen Vertrag(also Interface, anders gehts nicht).
- kapsele mit diesem Vertrag die Fremdkomponenten.
Vorteil:
- Ersetzbarkeit der Fremdkomponenten.
- höhere Unabhängigkeit
Nachteil:- Mehr Designarbeit, höherer Aufwand.
Die vorgeschlagenen Extensions können auch über Helperklassen gelöst werden(mehr sind diese Extensions auch nicht).
Lg XXX