2014-01-05 1 views
1

Я пишу библиотеку и своих клиентов, используя свою библиотеку.Как уведомить свойства дочерних классов клиента из моего родительского класса?

Мои клиенты создают собственные классы, полученные из моего базового класса.

Можно ли изменить свойство класса моего клиента?

Я не хочу, чтобы мои клиенты реализовали INotifyPropertyChanged.

Я также использую отражение для других целей. Почему отражение не может обнаружить статус изменения свойств?

Моя библиотека Код:

public class BaseClass 
{ 
    public void ChildPropertyChanged(propinfo...) 
    { 
     ... 
    } 
} 

код клиента:

public class MyClass : BaseClass 
{ 
    public string Name {get;set;} 
} 
+0

Будут ли их производные классы переопределять некоторые виртуальные методы, которые у вас есть в базовом классе? Или они могут в значительной степени положить все, что захотят, в производные классы? –

+0

. Классы ужинов не должны знать о подклассах. –

+0

Клиенты не будут переопределять мои методы. Да, клиенты могут вкладывать много, но обычно эти классы не являются сложными только свойствами и, возможно, некоторыми методами. – volkans80

ответ

0

Ваши клиенты должны сотрудничать, то есть они должны написать код, чтобы помочь вам поймать изменение свойств, как в клиентах INotifyPropertyChanged (исполнители) должны поднять событие (RaisePropertyChanged);

Если вы думаете об этом, если то, что вы спрашиваете, возможно, чем INotifyPropertyChanged не надо было ..

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

+0

Мне любопытно, есть ли способ реализовать без INotifyPropertyChanged? – volkans80

0

Вы можете реализовать шаблон template.

Базовый класс.

public class BaseClass 
{ 
    protected string name; 

    private void NameChanged() 
    { 
     ... 
    } 

    public void SetName(string value) 
    { 
     this.name = value; 
     this.NameChanged(); 
    } 
} 

производный класс:

public class MyClass : BaseClass 
{ 
    public string Name 
    { 
     get 
     { 
      return this.name; 
     } 

     set 
     { 
      this.SetName(value); 
     } 
    } 
} 

Хотя делать это таким образом устраняет необходимость свойства в производном классе - это может быть изменено с помощью метода базового класса SetName.

+0

Как узнать, что будет реализовано в производном классе? Это невозможно. – volkans80

+0

Они будут добавлять свои собственные свойства, и у вас нет контроля над ним? Если это так, то не уверен, что это возможно без использования 'INotifyPropertyChanged'. Как насчет написания события PropertyChanged и просить их поднять его при необходимости с до и после значения или что-то для «EventArgs». – PeteGO

Смежные вопросы