事件,多类实例&重叠变量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上按下按钮时调用

事件,多类实例&重叠变量c#

如果我正确阅读文档(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