0

对于多个实例,当事件处理程序如下声明时,它们是否倾向于重叠并设置变量的所有实例

比如说,

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”吗?因为就我而言,我开始相信事件处理程序是在类的所有实例之间共享的。因此,使类的所有实例中的所有变量都相同。

如果不是这种情况,事件处理程序可能是为什么我的变量都被引发的同一个事件改变的原因吗?如果是这样,您将如何隔离该类并将处理程序分配给每个单独的类?

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 上按下按钮时调用 ^

4

1 回答 1

1

如果我正确阅读了文档(http://msdn.microsoft.com/en-us/library/bb975820.aspxNetworkSession ),每个用户都会有一个。你是一个用户,所以你有一个NetworkSession

您创建了 的三个实例Something,我感觉它们都被同一个事件调用:连接到游戏网络的软件操作系统。

所有 3onconnect种方法都在e同一个实例中,NetworkSession并且您将 eventthanlder 连接onreceiveNetworkSession.onreceive.

因此,如果 NetworkSession 收到某些内容,则调用 3 个实例的所有 3 个事件处理程序。

NetworkSession通过使用NetworkSession.BeginCreatehttp://msdn.microsoft.com/en-us/library/microsoft.xna.framework.net.networksession.begincreate.aspx)为每个实例创建一个单独的实例。

于 2013-04-29T08:11:19.957 回答