事件,多类实例&重叠变量c#
本文关键字:重叠 变量 实例 事件 | 更新日期: 2023-09-27 18:11:13
对于多个实例,当像下面这样声明事件处理程序时,它们是否倾向于重叠并设置一个变量的所有实例
例如
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";
}
接收时str是否都变成"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);
}
}
和^在gui上按下按钮时调用
如果我正确阅读文档(http://msdn.microsoft.com/en-us/library/bb975820.aspx),每个用户将有一个NetworkSession
。你是一个用户,所以你有一个NetworkSession
。
你创建了三个Something
实例,我感觉它们都被同一个事件调用:连接到游戏网络的软件操作系统。
所有3个onconnect
方法在e
中获得NetworkSession
的相同实例,并且您将事件处理程序onreceive
连接到NetworkSession.onreceive
。
因此,如果NetworkSession接收到一些东西,则调用您的3个实例的所有3个事件处理程序。
使用NetworkSession.BeginCreate
(http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.net.networksession.begincreate.aspx)为每个实例创建一个单独的NetworkSession