Laden...

Konstruktor: Keine Überladung für die XY-Methode nimmt 0 Argumente an.

Erstellt von diana vor 15 Jahren Letzter Beitrag vor 15 Jahren 5.082 Views
D
diana Themenstarter:in
586 Beiträge seit 2004
vor 15 Jahren
Konstruktor: Keine Überladung für die XY-Methode nimmt 0 Argumente an.

Hallo,

ich komme einfach nicht weiter. Ich habe ein Basisfenster (Windows.Forms.Form), welches einen Konstruktor mit einem Übergabe-Parameter besitzt, des Weiteren ein vom Basis-Fenster abgeleitetes Fenster mit einem überschriebenen Konstruktor und base-Zugriff auf einen Member. Bis hierhin ok! Von diesem abgeleiteten Fenster wurde nun noch ein spezielles Fenster abgeleitet und dort kommt jetzt ein Fehler beim Konstruktor-Aufruf: Keine Überladung für die Frm-Methode nimmt 0 Argumente an. Der Konstruktor wurde aber auch mit einem Parameter, wie verlangt, aufgerufen. Syntaxmäßig kann ich keinen Fehler erkennen, daher ist die grundsätzliche Frage, ob eine dreifache Ableitung in dieser Form überhaupt möglich, aufgekommen. Vielleicht habt ihr eine Rat?

:::

M
198 Beiträge seit 2007
vor 15 Jahren

du hast also grob gesagt:



public class class1
{
    public class1(string para)
    {
        //...
    }
}

public class class2 : class1
{
    public class2(string para)
        : base(para) {}
}

public class class3 : class2
{
    public class3(string para)
        : base(para) {}
}

also auch wirklich bei jedem : base(para) gemacht?

1.002 Beiträge seit 2007
vor 15 Jahren

Hallo diana,

ja, die mehrfache Vererbung ist möglich.
Ich hatte dieses Problem auch, als ich explizit einen Konstruktor in der abgeleiteten Klasse erstellt habe, der Parameter enthielt, in der Basisklasse jedoch auch ein parameterloser vorhanden war, den ich dann in der abgeleiteten Klasse auch erstellt habe - fertig.

Edit: Da sich nach dem LSP Unterklassen so wie ihre Basisklassen verhalten müssen, ist es notwendig, dass ein parameterloser Konstruktor existiert, wenn die Oberklasse ebenfalls einen enthält.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

D
diana Themenstarter:in
586 Beiträge seit 2004
vor 15 Jahren

Danke erstmal für eure Antworten. Habe noch mal alles durchgesehen und Die parameterlosen Konstruktoren gesetzt, ich weiß schon, dass man die setzen muss, aber bei mir waren keine drin, was auch nicht gerade sauber ist und das base im letzten abgeleiteten Fenster gesetzt. Nun ist das erst mal wieder sauber und läuft... aber noch nicht richtig, da es sich bei mir ein wenig anders verhält und ich mit base nicht auf das Parent-Fenster zugreife sondern auf einen Member des Parent-Fensters bzw. ein Interface, über das ich im allg. bestimmte Werte beziehe, aber zur Zeit funktioniert das nicht, nach meiner Säuberung auch immer noch nicht! Also wie folgt:

public class class1
{
    public class1(string para)
    {
        //...
    }
    public class1()
    {
        //...
    }
}

public class class2 : class1
{
    public class2(string para)
        : base(interface) {}
    public class2()
     {}
}

public class class3 : class2
{
    public class3(string para)
        : base(interface) {}
    public class3()
        {}
} 

Wie gesagt jetzt habe ich die parameterlosen Konstruktoren eingebaut, sonst hat es ja nicht funktioniert und nun geht class2 immer in den Parameterlosen Konstruktor, obwohl beim Aufruf des abgeleiteten Spezial-Fensters ein Parameter übergeben wird. Ich schaue nochmal in Ruhe durch:-(...

:::

1.044 Beiträge seit 2008
vor 15 Jahren

Hallo diana,

du kannst in der Klasse class1 den parameterlosen Konstruktor über this() den anderen Konstruktor einen Parameter übergeben. Wenn du die Klasse _class1 _erbst, kannst du in der Unterklasse über base() einen oder auch keinen Paramter an die Superklasse übergeben.

zero_x