이것은 실제로 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;
}
}
하지만 이벤트 위임자를 복사하고 싶지는 않습니다. 공이 아닌 ballOne을 가리킬 것이기 때문에 그렇습니다. 맞죠? –
대리인은 ballOne에 대해 아무것도 모릅니다. 아마도 다른 객체 (폼?)에있는 ballOne_Bounce 만 참조하면됩니다. –