C# 克隆对象时事件是否孤立?
对于我拥有的其中一个类,有必要实现克隆方法。因此,我试图找出是否需要通过引用或值复制类的事件 例如,假设您有以下内容:C# 克隆对象时事件是否孤立?,c#,.net,events,C#,.net,Events,对于我拥有的其中一个类,有必要实现克隆方法。因此,我试图找出是否需要通过引用或值复制类的事件 例如,假设您有以下内容: Ball ballOne = new Ball(); ballOne.Bounce += new EventHandler(ballOne_Bounce); Ball ballTwo = ballOne.Clone(); 我应该如何编写克隆方法以触发ballTwo的反弹事件 谢谢, 泰勒 委托是.NET中的引用类型,它们也是不可变的,因此“引用与值”没有意义。如果要复制事件
Ball ballOne = new Ball();
ballOne.Bounce += new EventHandler(ballOne_Bounce);
Ball ballTwo = ballOne.Clone();
我应该如何编写克隆方法以触发ballTwo的反弹事件
谢谢,
泰勒
委托是.NET中的引用类型,它们也是不可变的,因此“引用与值”没有意义。如果要复制事件委托,只需复制它(即复制引用)。这实际上取决于您如何使用Ball对象以及如何克隆它。这在很大程度上取决于听者在做什么 如果希望ballOne和ballTwo具有完全相同的已注册事件侦听器,只需将事件处理程序引用从ballOne传递给ballTwo,它们都应该工作。不过,请记住,如果您随后向ballOne添加一个新的事件侦听器,ballTwo也不会得到它 我不知道你想做什么,但如果你有很多克隆球,你不知道哪些球有哪些事件侦听器,这可能会导致内存泄漏和很多麻烦
public class Box
{
public void InitializeBalls()
{
Ball ballOne = new Ball();
this.RegisterBall(ballOne);
Ball ballTwo = ballOne.Clone();
this.RegisterBall(ballTwo);
}
public void Ball_Bounce()
{
}
public void RegisterBall(Ball ball)
{
ball.Bounce += Ball_Bounce;
}
}
public class Ball
{
public event BounceEventHandler Bounce;
public delegate void BounceEventHandler();
public Ball Clone()
{
Ball clonedBall = null;
// Do some fancy clonin'
return clonedBall;
}
}
您最好在任何类上创建一个方法,以便它可以添加适当的事件侦听器
public class Box
{
public void InitializeBalls()
{
Ball ballOne = new Ball();
this.RegisterBall(ballOne);
Ball ballTwo = ballOne.Clone();
this.RegisterBall(ballTwo);
}
public void Ball_Bounce()
{
}
public void RegisterBall(Ball ball)
{
ball.Bounce += Ball_Bounce;
}
}
public class Ball
{
public event BounceEventHandler Bounce;
public delegate void BounceEventHandler();
public Ball Clone()
{
Ball clonedBall = null;
// Do some fancy clonin'
return clonedBall;
}
}
但他不想复制事件代表,因为这将指向ballOne而不是ballTwo,对吗?该代表对ballOne一无所知。它只引用ballOne_Bounce,它可能位于其他对象(表单?)上。