对于多个实例,当事件处理程序被声明如下时,它们是否倾向于重叠并设置变量的所有实例
比方说,
Something class = new Something();
被声明〜3次,并且在所有3次上,声明并使用了事件处理程序。
public class something
{
public string str = "1";
public string str2 = "2";
public void onconnect(object sender, ConnectedEventArgs e)
{
if (e.Connected)
{
this.ses = e.NetworkSession;
this.ses.OnHandshakeHandler += new EventHandler<HSEventArgs>(OnHandshakeHandler);
this.ses.onreceive+= new EventHandler<PEventArgs>(onreceive);
return;
}
}
}
现在让我们说
public void onreceive(object sender, PEventArgs e)
{
str = "3";
}
是否会将所有内容都转为“3”?因为在我的情况下,我开始相信eventhandler在类的所有实例之间共享。因此,渲染类的所有实例中的所有变量都是相同的。
如果不是这种情况,那么事件处理程序可能是导致我的变量因所引发的同一事件而改变的原因吗? 如果是这样,你将如何隔离类并将处理程序分配给每个单独的类?
onconnect由
调用 public void Connect(string ip, short port)
{
try
{
this.connector = new Connector();
this.connector.OnClientConnected += new EventHandler<ConnectedEventArgs>(onConnect);
this.connector.Connect(ip, port); //Logs into server
}
catch
{
updateLog("[Error]Servers exploded!!!", this);
}
}
当按下按钮时,和^被调用
答案 0 :(得分:1)
如果我正确阅读文档(http://msdn.microsoft.com/en-us/library/bb975820.aspx),每个用户将有一个NetworkSession
。您是一位用户,因此您只有一位NetworkSession
。
您创建了三个Something
实例,我感觉它们都被同一个事件调用:连接到游戏网络的软件。
所有3个onconnect
方法都会e
NetworkSession
onreceive
个{}进入NetworkSession.onreceive
,并将您的事件处理者NetworkSession
与NetworkSession.BeginCreate
相关联。
因此,如果NetworkSession收到某些内容,则会调用3个实例中的所有3个事件处理程序。
使用{{1}}(http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.net.networksession.begincreate.aspx)为每个实例创建一个单独的{{1}}。