2010-07-13 4 views
0

내가 가지고있는 클래스 중 하나 인 경우, 복제 메소드를 구현해야합니다. 그래서 클래스의 이벤트를 참조 또는 으로 복사해야하는지 알기 위해 노력하고 있습니다. ballTwo의 바운스 이벤트가 트리거되도록개체가 복제 될 때 이벤트가 고아가됩니까?

Ball ballOne = new Ball(); 
ballOne.Bounce += new EventHandler(ballOne_Bounce); 

Ball ballTwo = ballOne.Clone(); 

가 어떻게 복제 방법을 작성해야 : 예를 들어

, 다음 당신이 가정 해 봅시다?

감사합니다, 타일러

답변

1
public Ball Clone() { 
    ... create the new instance ... 
    clone.Bounce = Bounce; 
    ... set more properties ... 
    return clone; 
} 

대표 .NET에서 참조 형식이며, 그들은 또한 불변, 그래서 "값 대 기준"은 의미가 없습니다. 이벤트 대리자를 복사하려면 복사 (참조 복사)합니다.

+0

하지만 이벤트 위임자를 복사하고 싶지는 않습니다. 공이 아닌 ballOne을 가리킬 것이기 때문에 그렇습니다. 맞죠? –

+0

대리인은 ballOne에 대해 아무것도 모릅니다. 아마도 다른 객체 (폼?)에있는 ballOne_Bounce 만 참조하면됩니다. –

0

이것은 실제로 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; 

    } 

} 
관련 문제