Nun, ich versuche, einen Teil des C # -Codes wiederzuverwenden. Es ist eine abstrakte Klasse mit UDP-Server, die hier zu sehen ist:
Ich habe eine abgeleitete Klasse wie folgt erstellt:
%Vor%Und in meiner App habe ich eine Instanz der abgeleiteten Klasse wie folgt erstellt:
%Vor%Aber ich habe Fehler und ich verstehe nicht wirklich warum. Bitte helfen.
Konstruktoren werden in C # nicht geerbt. Sie müssen sie manuell verketten:
%Vor%Wenn Start ebenfalls geschützt ist, müssen Sie eine öffentliche Methode erstellen, die es aufruft:
%Vor%Ihre abgeleitete Klasse muss einen Konstruktor mit einem Parameter hinzufügen und an die Basisklasse delegieren:
%Vor% Außerdem ist die Methode Start
geschützt. Sie werden Ihre eigenen brauchen:
Diese Fehler haben eigentlich recht einfache Ursachen:
Sie haben in Ihrer abgeleiteten Klasse keinen Konstruktor definiert ( TheServer
). Konstruktoren (im Gegensatz zu Methoden natürlich) werden nicht automatisch vererbt, also müssen Sie Konstruktoren deklarieren, die mit denen in der Elternklasse übereinstimmen, und sie unter Verwendung von etwa wie folgt zusammenketten:
Die Methode Start
wird in der Klasse base ( protected
) als UDPServer
deklariert. Ändern Sie den Zugriffsmodifikator in der Basisklasse in public
, oder finden Sie einen Weg, die Methode bei Bedarf von der abgeleiteten Klasse aufzurufen (letzterer muss vom Autor von UDPServer
gemeint sein).
Ich hoffe, das hilft.
Sie haben keinen TheServer-Konstruktor mit einem Argument definiert, sodass Sie TheServer (20501) nicht aufrufen können; Sie haben keinen Nullargumentkonstruktor für UDPServer definiert, aber Sie haben einen mit einem Argument definiert. Ihre zwei Methoden in TheServer sind geschützt, daher der Fehler auf # 2.
Fügen Sie dem Server einen Konstruktor hinzu, der den Basiskonstruktor (von UDPServer) aufruft. etwas wie das:
%Vor%2 Sehen Sie sich die Methode Start am UDPServer an: Sie ist geschützt. Dies bedeutet, dass nur Unterklassen dieser Klasse sie aufrufen können.
Sie müssen den Code in Ihrer Abstract-Klasse veröffentlichen, aber mit einer vollständigen Schätzung,
Sie haben eine ctor
in Ihrer UDPServer-Klasse, die Sie nicht in Ihrer TheServer-Klasse implementiert haben ... Sie brauchen etwas wie ...
Sie haben auch vergessen, die Methode Start () in Ihrer Klasse TheServer zu überschreiben aber es ist als privat in der zugrunde liegenden Klasse markiert ... Ihre zugrunde liegende Klasse sollte etwas wie ...
haben %Vor%Tags und Links c# constructor abstract-class