Laden...

Vererbung - wie Klasse erweitern...

Erstellt von HartlBe vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.465 Views
H
HartlBe Themenstarter:in
11 Beiträge seit 2005
vor 15 Jahren
Vererbung - wie Klasse erweitern...

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

I
1.739 Beiträge seit 2005
vor 15 Jahren
Rofl

Sorry, ich antworte Morgen vernünftig - hoffe das ist ok.

M
205 Beiträge seit 2008
vor 15 Jahren

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:

  1. Wieso? höchstwahrscheinlich liegt da ein grober Designfehler vor wenn du 2 gleiche Methoden in 2 Klassen mit gleicher Basis haben willst.

  2. 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.

  3. Poste mal was du genau machen willst

mfg Markus

H
HartlBe Themenstarter:in
11 Beiträge seit 2005
vor 15 Jahren
  1. 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

I
1.739 Beiträge seit 2005
vor 15 Jahren

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).

C
401 Beiträge seit 2007
vor 15 Jahren

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.

1.378 Beiträge seit 2006
vor 15 Jahren

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