У меня возникают трудности при попытке подвести итог моего вопроса в виде запроса Google (может быть, мой foo выключен):
Я пытаюсь дать интерфейсу или классу некоторую функциональность, не редактируя само определение типа, а скорее наряжая объект интерфейсом. Простой пример, который я пытаюсь сделать, - это прикрепить Атрибут, называемый [Notify], в котором определено событие изменения свойства, чтобы в идеале дать интерфейсу / классу использование события. Мне это не удалось, поэтому я открываюсь на любое устройство (если есть), чтобы получить эквивалент:
[Notify]
public interface IPerson
{
string Name { get; set; }
}
[AttributeUsage(AttributeTargets.Interface, AllowMultiple = false, Inherited = false)]
public class Notify: Attribute
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
Использование IPerson:
IPerson person = PersonFactory.create();
person.PropertyChanged += SomeDelegateHere // the center peice
Конечно, если вы скопировали этот код, у человека не будет PropertyChanged. С атрибутами или без них, есть ли способ добиться, предоставляя IPerson больше функциональности, не меняя определения (т.е. не добавляя интерфейс или базовый класс). Я понимаю, что атрибуты тоже меняются, но я доволен подходом метаданных.
Заранее благодарим за любой свет, который можно пролить.