2017-10-01 1 views
-3

Ich habe diesen FehlerWarum müssen Basisklassen standardmäßig neu sein?

https://docs.microsoft.com/en-us/dotnet/visual-basic/misc/bc30387

Und ich frage mich, warum.

Wie wäre es, wenn ich niemals parameterless new sowohl in der Basis als auch in abgeleiteten Klassen aufrufen möchte?

Ich kann das tun, wenn ich Vererbung nicht verwende. Warum vererbt ich das nicht mehr?

Um das Problem zu wiederholen

Was ist die Erklärung? Also braucht nicht jede Klasse parameterlose neue Klassen, sondern Klassen mit Vererbung? Das ergibt keinen Sinn.

Was ist, wenn ich abgeleitete Klasse nie mit Parameter weniger Konstruktor aufrufen. Ich habe nicht die Absicht, dass die Klasse jemals ohne Parameter konstruiert wird.

Zum Beispiel, sagen wir, ich möchte eine Klasse ohne parameterlosen Konstruktor erstellen. Ich kann das richtig machen.

Aber sagen, ich möchte die Klasse in zwei teilen. Eltern- und Kindklasse Ich möchte BEIDE nicht parameterlosen Konstruktor haben.

Es scheint, dass ich das nicht kann, kann ich? Wenn dies der Fall ist, kann es jemand bestätigen.

+0

Bitte teilen Sie Ihren Code. –

+6

Der von Ihnen gepostete Link gibt eine vollkommen klare Erklärung. – Plutonix

+0

Die Frage löst sich um die Tatsache, dass ich es sehr seltsam fand, dass ich keine Klassen ohne parameterlosen Konstruktor erstellen kann, wenn und nur wenn ich Vererbung verwende. –

Antwort

1

Der Link sagt, dass, wenn Sie einen expliziten Konstruktor in Ihrer Basisklasse mit Parametern und ohne parameterlos ein, als Sie nicht Ihre abgeleitete Klasse ohne Konstruktor verlassen können. Weil VB.NET keinen impliziten Konstruktor für die abgeleitete Klasse erstellen kann.

Wenn Sie keine Konstruktoren für beide schreiben, ist es absolut gültig.

public class Base 

End Class 

Public Class Derived 
    Inherits Base 

End Class 

Sie können jedoch keine abgeleitete Klasse ohne einen expliziten Konstruktor wie unten deklarieren. Weil VB.NET nicht bestimmen kann, wie die Basisklasse initialisiert wird.

Um dieses Problem zu beheben, können Sie einen Standardkonstruktor für die abgeleitete Klasse deklarieren, der den Basisklassenkonstruktor mit einem Standardwert aufruft.

public class Base 
    Public sub New(ByVal Item As Integer) 

    End Sub 
End Class 

Public Class Derived 
    Inherits Base 

    Public Sub New() 
     MyBase.New(5) 

    End Sub 
End Class 
+0

Warum kann vb.net den Parameterkonstruktor mit dem Parameterkonstruktor der Basisklasse erstellen? Oh, weil Konstruktoren spezielle Funktionen sind, die nicht einfach vererbt werden? –

+0

Alle Klassen müssen einen Konstruktor haben, um sich zu initialisieren. Wenn es keinen parameterlosen Konstruktor, kann Compiler nicht bestimmen, welche aufgerufen werden soll und kann nicht Parameter übergeben mit einem eigenen, appearently. Sie müssen es also explizit aufrufen. Für Vererbung Teil sollte abgeleiteten Klassen nicht mit der Basisklasse Einbauten gestört und es braucht nur nur die Basis Ctor rufen Sie die init zu tun. – fofik

Verwandte Themen