好吧,我正在尝试重用一部分C#代码。它是一个带UDP服务器的抽象类,可以在这里看到:
http://clutch-inc.com/blog/?p=4
我已经创建了一个这样的派生类:
public class TheServer : UDPServer
{
protected override void PacketReceived(UDPPacketBuffer buffer)
{
}
protected override void PacketSent(UDPPacketBuffer buffer, int bytesSent)
{
}
}
在我的应用程序中,我创建了一个派生类的实例,如下所示:
TheServer serv = new TheServer(20501);
serv.Start();
但我有错误,我不明白为什么。请帮忙。
答案 0 :(得分:13)
构造函数不会在C#中继承。您必须手动链接它们:
public TheServer(int port)
: base(port)
{
}
此外,如果Start受保护,则必须创建一种调用它的公共方法:
public void StartServer()
{
Start();
}
答案 1 :(得分:8)
您的派生类需要添加一个参数构造函数,并将其委托给基类:
public TheServer(int port) : base(port) {}
此外,Start
方法受到保护。你需要自己的:
public void StartMe(){base.Start();}
答案 2 :(得分:2)
这些错误实际上有相当直接的原因:
您尚未在派生类(TheServer
)中定义构造函数。构造函数(当然不同于方法)不会自动继承,因此您需要声明与父类中的构造函数匹配的构造函数,并使用以下内容将它们链接在一起:
public TheServer(int port) : base(port)
{
// Your code here.
}
public TheServer() : base()
{
// Your code here.
}
Start
方法在基础(protected
)类中声明为UDPServer
。将基类中的访问修饰符更改为public
,或者在需要时找出从派生类调用方法的方法(后者必须由UDPServer
的编写者预期)
希望有所帮助。
答案 3 :(得分:0)
您没有使用一个参数定义TheServer构造函数,因此您无法调用TheServer(20501);您没有为UDPServer定义零参数构造函数,但您使用一个参数定义了一个。 TheServer中的两个方法都受到保护,因此#2上的错误。
答案 4 :(得分:0)
向调用基础构造函数(UDPServer)的TheServer添加构造函数;像这样的东西:
public TheServer(int port) : base(port) {}
2 查看方法Start on UDPServer:它受保护。这意味着只有该类的子类可以调用它。
答案 5 :(得分:0)
public class TheServer
{
public TheServer():base(port) {
}
}
var myServer = new TheServer(1337).Brings().All().The().Boys().to().The().Yard()
答案 6 :(得分:0)
您需要将代码发布到Abstract类,但需要完全猜测,
您的UDPServer类中有一个ctor
未在您的TheServer类中实现...您需要类似......
public TheServer(int port) : base(port)
{
... specifics
}
你也忘记了重写TheServer类中的Start()方法 但它在底层类中标记为私有...你的底层类应该有类似......
//In UDPServer
protected void Start()
{
//Code to start
}
//In TheServer
protected void StartTheServer()
{
base.Start();
}
答案 7 :(得分:0)
而且,为了它的价值,我建议使用:
UDPServer serv = new TheServer(20501);
serv.start();
或者,甚至更通用的服务器。取决于你需要在serv上调用什么方法。