2012-03-14 6 views
0

속성이있는 공용 클래스가 있습니다. 사용자 및 일부 내부 코드에 의해 변경 될 수 있습니다. 사용자가 속성을 변경했는지 어떻게 결정합니까? 어쩌면이 작업을위한 몇 가지 패턴이 있을까요?변경된 속성 확인

내 문제가 충분히 명확하지 않은 것처럼 보입니다. 많은 속성이 포함 된 공용 클래스가있는 DLL이 있습니다. 사용자가 설정할 수 있습니다. 또한 내 DLL의 내부 코드에서 설정됩니다. 사용자가 해당 속성을 설정했는지 여부를 알 수있는 메커니즘을 만들어야합니다.

+0

사용자가 변경했음을 알 필요가있는 사항은 무엇입니까? –

+0

"외부 사용자가"- 클래스를 사용하는 다른 코드와 클래스 자체의 코드를 의미합니까? –

+0

Daniel A. White : 다른 클래스가 사용자가 속성을 변경했는지 확인합니다. – user393679

답변

0

이 부분을보십시오 : How to: Implement Property Change. 이것은 기본적으로 INotifyPropertyChanged을 구현하는 예제입니다.

다른 사람이 지적한 것처럼 어떤 일이 발생했을 때 다른 사람에게 알리는 패턴을 관찰자 패턴이라고합니다. 코드를 처리하는 이벤트에서이 점을 많이보아야합니다. 클래스 사용자는 이벤트가 발생할 때 호출 할 콜백을 제공하여 알림에 등록합니다 (경우에 따라 일부 속성의 값 변경). 예제 코드에서 PersonName 속성이 변경 될 때마다 클래스 사용자에게 알립니다.

0

옵저버 패턴 :).

이벤트를 사용해야합니다.

Public Property EstMenage() As Boolean 
     Get 
      Return _estMenage 
     End Get 
     Set(ByVal value As Boolean) 
      _estMenage = value 
      NotifyDataChanged() 
     End Set 
    End Property 


    Private Sub NotifyDataChanged(ByVal sender As Object, ByVal e As EventArgs) 
     RaiseEvent OnDataChanged(sender, e) 
    End Sub 

    Private Sub NotifyDataChanged() 
     NotifyDataChanged(me, new EventArgs()) 
    End Sub 

    <NonSerialized()> _ 
    Friend Event OnDataChanged(ByVal sender As Object, ByVal e As EventArgs) 

편집 :에서

setter 당신이 결정하는 몇 가지 코드를 가질 수있다 여기에 INotifyPropertyChanged

에서보세요 당신이 고려해야 니펫을 조금 코드, 그것은 changement를 통지 할 기본 이벤트를 사용 호출하는 메소드가 실제 클래스 내에 있는지 여부. 호출자가 클래스 인 경우 => 그나마 다른 인상 , 호출자는 => 당신은 StackTrace을 얻고 속성을 호출 무엇 분석 할 수

+0

이 코드에서는 속성이 내부 코드 또는 외부 코드에 의해 변경된 경우 모두에 알림이 표시됩니다. – user393679

+0

알림을 원하지 않으면 비공개 회원에게 직접 액세스하지 않으시겠습니까? 그게 내가하는 일이야. 내부적으로 클래스 내부에서 작업하기 때문에 속성을 사용할 필요가 없습니다. 내가 본 다른 해결책은 리플렉션을 사용하여 호출 방법을 결정하는 것입니다. 호출하는 메소드가 실제 클래스의 일부가 아닌 경우 이벤트를 발생시킵니다. 그렇다면 인상하지 마십시오. 그러나 이것은 조금 더 비쌉니다 – squelos

+0

내가 속한 같은 클래스에 속하지 않는 속성을 변경합니다. – user393679

0

올립니다 클래스에 있지 않습니다. Environment.StackTrace을 사용하여 함수를 호출하는 정보를 얻을 수 있습니다.

+0

내 경우에는 너무 복잡해. – user393679

+0

당신은 문제의 고통이 훨씬 더 많은 시간을 보낸 다음 어떤 방식 으로든 구현하는 데 드는 비용을 썼다.) – MajesticRa