我有一个包含多个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对象的副本呢?
你不必担心这一点.该EventHandler<EventArgs>对象是不可变的,因此任一对象中侦听器列表的任何更改都将导致该对象获取EventHandler<EventArgs>包含更新的调用列表的新实例.这种变化不会出现在另一个变化中GameObject.
尝试使用 += 运算符添加它。我什至不知道可以分配一个事件。
clone.Initialize += this.Initialize;
Run Code Online (Sandbox Code Playgroud)
此外,所有委托都是不可变的值类型,因此您不必担心它们指向同一个对象 - 当您执行如上所述的操作时,整个委托都会被复制(如果您愿意,则可以克隆)。