2009-07-16 3 views

답변

18

아니요, C#에서 오버로드 할당 연산자와 같은 작업을 수행 할 수 없습니다. 변수를 속성으로 변경하고 메서드를 호출하거나 설정자에서 이벤트를 위임하거나 발생시키는 것이 가장 좋습니다.

private string field; 
public string Field { 
    get { return field; } 
    set { 
     if (field != value) { 
      field = value; 
      Notify(); 
     } 
    } 
} 

이것은 속성 변경을 추적하기 위해 많은 프레임 워크에 의해 (WPF DependencyProperty 시스템 등) 이루어집니다.

+0

Mehrdad에게 감사드립니다. – Rohit

+0

이 작업을 수행하는 가장 좋은 방법은'INotifyPropertyChanged' 인터페이스입니다. –

1

그렇게 할 방법이 없습니다. 변수는 기본적으로 응용 프로그램이 기록하는 메모리의 장소입니다.

대신 속성 사용 : 당신은 (변수 임) 모델의 GUI에 대한 참조가 직접 setter 메소드의 GUI 변경을 수행하거나, 당신이 당신의 GUI 관찰 할 하나

string myVariable; 
public string MyVariable 
{ 
    get 
    { 
     return myVariable; 
    } 
    set 
    { 
     myVariable = value; 
     MyVariableHasBeenChanged(); 
    } 
} 

private void MyVariableHasBeenChanged() 
{ 

} 
+0

작은 관찰 일 경우 변경 한 후에 "MyVariableHasBeenChanged"를 호출하는 것이 좋습니다. 그렇게하면 메서드에서 무언가를 수행 할 수 있고 할당에 예외가 발생하는 경우에 대처할 수 있습니다. –

+0

확실히 더 나은 (그리고 아마도 유일한 유용한 방법). 감사. – weiqure

0

을 관측자를 통해 모델을 관측하고 관측 가능한 모형을 세터의 관측자에게 알려야합니다. 전자는 결국 스파게티 코드로 이어질 것입니다. 모델과 뷰 사이에 더 많은 직접 링크가 추가되므로 사내 도구와 간단한 프로그램에만 사용해야합니다.

3

Observer pattern. 여기에 another reference이 있습니다.

+0

이 문제에 대한 해결책으로 옵저버 패턴에 대해 부정적 투표를 정당화 할 수 있습니까? –

+0

당신이 틀렸고 유권자가 머리를 숙이 게해야합니다. 가장 단순한 형태의 옵저버가 올바른 패턴입니다. WPF가 사용하는 것이므로 실제로 WPF에 '무엇이 변경되었는지'를 알려줄 필요가 있습니다. 나는 너를 구제하기 위해 +1 할 것이다. –

+0

Downvote는 링크 전용 답변이기 때문에 의심 스럽습니다. – Blorgbeard

2

데이터 바인딩 : in WPFWindows Forms에 사용할 수도 있습니다. 이를 통해 객체의 속성 인 과 그 반대로에 따라 GUI의 상태를 변경할 수 있습니다.

관련 문제