Определить свойство изменено - PullRequest
0 голосов
/ 14 марта 2012

У меня есть публичный класс со свойствами. Они могут быть изменены пользователем и в некотором внутреннем коде. Как определить, было ли свойство изменено пользователем? Может быть, есть какие-то шаблоны для этой задачи?

Похоже, я объяснил свою проблему недостаточно ясно. У меня есть DLL с публичным классом, который содержит много свойств. Пользователь может установить их. Также они заданы во внутреннем коде моей библиотеки. Мне нужно создать механизм, чтобы знать, было ли это свойство установлено пользователем или нет.

Ответы [ 3 ]

0 голосов
/ 14 марта 2012

Шаблон наблюдателя :).

Вы должны использовать события. Посмотрите INotifyPropertyChanged

Вот небольшой фрагмент кода, который вы должны рассмотреть, он использует основные события для уведомления об изменении:

    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 вы можете иметь некоторый код, который определяет, находится ли вызывающий метод в фактическом классе или нет. Если звонящий находится в классе => Не повышать Иначе звонящий не в классе => Поднять

0 голосов
/ 14 марта 2012

Вы можете получить StackTrace и проанализировать, что вызывает свойство.Вы можете использовать Environment.StackTrace , чтобы получить информацию о том, что вызывает ваша функция.

0 голосов
/ 14 марта 2012

Взгляните на это: Как выполнить изменение свойства . Это в основном пример реализации INotifyPropertyChanged .

Как указали другие, шаблон уведомления других о том, что что-то произошло, называется шаблоном наблюдателя. Вы должны увидеть это в коде обработки событий. Пользователи вашего класса подписались бы на уведомление, предоставив обратный вызов, который будет вызываться при возникновении события (в вашем случае это изменение значения какого-либо свойства). В примере кода пользователи класса получают уведомление при каждом изменении свойства PersonName.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...