C#clone EventHandler

Ent*_*ity 4 c# event-handling

我有一个包含多个EventHandler的类(除其他外):

public GameObject
{
    public event EventHandler<EventArgs> Initialize;
    public event EventHandler<EventArgs> BeginStep;
    ....
}
Run Code Online (Sandbox Code Playgroud)

我希望能够向Clone()GameObject 添加一个函数,该函数返回它被调用的对象的精确副本.我尝试这样做:

    public GameObject Clone()
    {
        var clone = new GameObject()
        {
            Initialize = this.Initialize,
            BeginStep = this.BeginStep,
        };
    }
Run Code Online (Sandbox Code Playgroud)

但是,它似乎是clone.BeginStep指向同一个对象,this.BeginStep而不是制作副本.那么,我如何制作一个EventHandler对象的副本呢?

Fre*_*örk 6

你不必担心这一点.该EventHandler<EventArgs>对象是不可变的,因此任一对象中侦听器列表的任何更改都将导致该对象获取EventHandler<EventArgs>包含更新的调用列表的新实例.这种变化不会出现在另一个变化中GameObject.


Shd*_*dNx 5

尝试使用 += 运算符添加它。我什至不知道可以分配一个事件。

clone.Initialize += this.Initialize;
Run Code Online (Sandbox Code Playgroud)

此外,所有委托都是不可变的值类型,因此您不必担心它们指向同一个对象 - 当您执行如上所述的操作时,整个委托都会被复制(如果您愿意,则可以克隆)。