Меня интересует подходящая структура класса, касающаяся использования обработчика событий.
У меня есть класс Age, который вызывает действие при изменении значения age.У меня есть класс Person, в котором переменная-член имеет объект Age.
В моем первом сценарии класс Person передает свой обработчик событий объекту Age в качестве аргумента своего конструктора.
class Age
{
private readonly EventHandler _valueChanged;
private int _value;
public int Value
{
get { return _value; }
private set
{
_value = value;
RaiseValueChangedEvent();
}
}
public Age(EventHandler handler)
{
_valueChanged = handler;
}
protected void RaiseValueChangedEvent()
{
var handler = _valueChanged;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
}
class Person
{
private readonly Age _age;
public Person()
{
_age = new Age(OnAgeChanged);
}
protected void OnAgeChanged(object sender, EventArgs e)
{
// Do what is necessary.
}
}
Во втором сценарии у класса Age есть событие, а класс Person прослушивает его запуск.
class Age
{
public event EventHandler ValueChanged;
private int _value;
public int Value
{
get { return _value; }
private set
{
_value = value;
RaiseValueChangedEvent();
}
}
protected void RaiseValueChangedEvent()
{
var handler = ValueChanged;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
}
class Person
{
private readonly Age _age = new Age();
public Person()
{
_age.ValueChanged += OnAgeChanged;
}
protected void OnAgeChanged(object sender, EventArgs e)
{
// Do what is necessary.
}
}
Какая структура лучше?И почему?