2010-02-20 3 views
1

내 클래스의 속성이 설정 될 때마다 이벤트가 발생합니다. 내 속성 중 하나가 설정 될 때마다이 동일한 이벤트를 트리거 할 수 있어야합니다. 나는 가지고있다 (그들의 약 12)C# : GET/SET 속성에서 클래스에 대한 이벤트 만들기

I.

public class MyClass 
{ 
    private int _myHeight; 
    private int _myWidth; 

public int myHeight 
{ 
    get { return myHeight; } 
    set { myHeight = value; 
     //This fires event! 
     } 
} 
public int myWidth 
{ 
    get { return myWidth; } 
    set { myWidth = value; 
     //This will fire the same event! 
} 

나는 이벤트 자체에 익숙하지 않고 이벤트를 만드는 데 새로운 방법을 사용합니다. 나는 항상 Windows 응용 프로그램에서 사용되는 'out of the box'이벤트를 사용했습니다. 어떤 아이디어?

+0

이 질문을보십시오. http://stackoverflow.com/questions/2264533/listener-c-like-java/2264547#2264547 – IordanTanev

답변

3

INotifyPropertyChange을 사용하는 것이 올바른 접근 방식입니다 (.NET에서 널리 사용되는 유형이므로 누구나 사용자의 의도가 무엇인지 이해할 수 있음). 당신은 단지 시작하는 몇 가지 간단한 코드를 원하는 경우, 다음 클래스의 구현은 다음과 같습니다

public class MyClass 
{ 
    private int _myHeight; 
    public event EventHandler Changed; 

    protected void OnChanged() { 
    if (Changed != null) Changed(this, EventArgs.Empty); 
    } 

    public int myHeight 
    { 
    get { return myHeight; } 
    set { 
     myHeight = value; 
     OnChanged(); 
    } 
    } 
    // Repeat the same pattern for all other properties 
} 

이 학습과 나쁜 좋은 될 수있는 코드를 (작성하는 가장 간단한 방법입니다 더 큰 실제 응용 프로그램의 경우).

+1

실제로 이것은 정상적인 방법입니다. 필드를 설정하고 이벤트를 발생시키기 전에 mHeight가 실제로 다른 값으로 변경되는지 확인하는 것이 좋습니다. 그렇지 않으면 UI가 이벤트를 청취하고 멤버를 설정하면 무한 이벤트 연속에서 멈출 수 있습니다. – munificent

+0

좋은 점 - 실제로 변경된 값이 아주 유용한 지 확인하는 것. –

5

이렇게하려면 클래스에 INotifyPropertyChanged을 구현해야합니다. 여기에 example이 있습니다.

+0

+1 :이 인터페이스에 대해 전혀 알지 못했습니다. – contactmatt

+0

@ contactmatt 그것은 주로 WPF 개발에 사용됩니다. – Esteban

관련 문제