Classe abstraite, des constructeurs et des Co
Bien, je suis en train de réutiliser une partie du code C#. C'est une classe abstraite avec UDP serveur, qui peut être vu ici:
http://clutch-inc.com/blog/?p=4
J'ai créé une classe dérivée comme ceci:
public class TheServer : UDPServer
{
protected override void PacketReceived(UDPPacketBuffer buffer)
{
}
protected override void PacketSent(UDPPacketBuffer buffer, int bytesSent)
{
}
}
Et dans mon application, j'ai créé une instance de la classe dérivée comme ceci:
TheServer serv = new TheServer(20501);
serv.Start();
Mais j'ai eu des erreurs et je ne comprends vraiment pas pourquoi. S'il vous plaît aider.
- 'TheProject.TheServer " n'
contenir un constructeur qui prend un '1'
les arguments - 'TheProject.UDPServer.Start()' est
inaccessible en raison de sa protection
niveau - 'TheProject.UDPServer " n'
contient pas un constructeur qui prend
'0' arguments
OriginalL'auteur undsoft | 2009-05-01
Vous devez vous connecter pour publier un commentaire.
Constructeurs ne pas avoir hérité en C#. Vous aurez à chaîne manuellement:
Aussi, si le Départ est protégé, vous aurez à créer une sorte de méthode publique qui l'appelle:
OriginalL'auteur Tamas Czinege
Votre classe dérivée doit ajouter un paramètre du constructeur, et de déléguer à la classe de base:
Aussi, le
Start
méthode est protégé. Vous aurez besoin de votre propre:OriginalL'auteur John Saunders
Ces erreurs ont en fait assez simple causes:
Vous n'avez pas défini un constructeur dans votre classe dérivée (
TheServer
). Les constructeurs (à la différence des méthodes de cours) ne sont pas automatiquement transmis, de sorte que vous aurez besoin de déclarer les constructeurs qui correspondent à toi dans la classe parent et de la chaîne d'ensemble en utilisant quelque chose comme:La
Start
méthode est déclarée commeprotected
dans la base (UDPServer
) de la classe. Soit changer le modificateur d'accès dans la classe de base pourpublic
, ou trouver un moyen pour appeler la méthode de la classe dérivée lorsque vous en avez besoin (ce dernier doit avoir été prévu par l'écrivain deUDPServer
).Espère que ça aide.
OriginalL'auteur Noldorin
Vous n'avez pas de définir un TheServer constructeur à un argument de sorte que vous ne pouvez pas appeler TheServer(20501); vous n'avez pas de définir un zéro constructeur d'arguments pour UDPServer mais vous avez défini un avec un seul argument. Vos deux méthodes dans TheServer sont protégés, d'où l'erreur #2.
OriginalL'auteur Otávio Décio
Ajouter un constructeur à TheServer qui appelle le constructeur de base (de UDPServer); quelque chose comme ceci:
2
Découvrez la méthode Démarrer sur UDPServer: il est protégé. Cela signifie que seuls les sous-classes de cette classe peuvent appeler.
OriginalL'auteur Kurt Schelfthout
OriginalL'auteur Chad Grant
Vous aurez besoin de mettre le code de votre classe Abstraite mais une supposition terminée,
Vous avez un
ctor
dans votre UDPServer classe que vous n'avez pas mis en œuvre dans votre TheServer Classe... Vous besoin de quelque chose comme...Et vous avez aussi oublié de remplacer la méthode Start() dans votre classe TheServer
mais ses marqués comme privés dans la classe sous-jacente... Votre classe sous-jacente devrait avoir quelque chose comme...
OriginalL'auteur Eoin Campbell
Et, pour ce que ça vaut, je vous recommande d'utiliser:
Ou, peut-être même plus générique, à un Serveur. Dépend de ce que les méthodes que vous devez faire appel à la serv.
OriginalL'auteur Elliot