【发布时间】:2015-04-11 05:29:19
【问题描述】:
好吧,伙计们,我是 stackoverflow 的新手,如果我有什么东西请告诉我。
我正在为套接字制作一个类库,然后使用该类库制作一个服务器。我遇到的问题是这样的:
在类库中,我有一个名为 sockets 的类,它具有事件处理程序(您知道连接已建立、已关闭等),在我正在制作的服务器中,我有一个名为 player 的类,它继承自sockets.
问题几乎可以归结为这一点。
我使用OnConnectionMade 事件处理程序来创建我的player,但是因为我不能做instanceOfInheritedClass = intanceOfBaseClass,即使我使用事件处理程序,事件处理程序也不会触发,因为instanceOfInheritedClass 没有指向intanceOfBaseClass事件,如果我通过参数。
void hostManager_OnConnectionMade(object source, ConnectionArgs e)
{
Player socket = new Player(e.GetSocket());
socket.OnDataRecivedPostConvert += Socket_OnDataRecivedPostConvertLogin;
}
public Player(DDSocket socket)
{
this.Host = socket.Host;
this.Socket = socket.Socket;
//this.OnConnectionClosed += socket.OnConnectionClosed;
//this.OnDataRecivedPostConvert += socket.OnDataRecivedPostConvert;
//this.OnDataRecivedPostConvertHost += socket.OnDataRecivedPostConvertHost;
}
我想出的一个解决方案是,我可以在player 类中将其设置为intanceOfBaseClass 参数,而不是继承。但这将阻止我从我的事件处理程序中正确使用对象 source,这意味着我需要使用 linq 或其他东西从 socket 或类似的东西中找到 player。
我想做的另一件事是以某种方式传递事件处理程序,你可以看到我尝试过,但不知道该怎么做。
现在经过几个小时的查找,我被困住了。任何帮助是极大的赞赏 任何解决这个问题的答案都很好。我对它的解决方法并不挑剔。
【问题讨论】:
标签: c# winforms sockets inheritance event-handling