Ich habe Schwierigkeiten, meine Frage in Form einer Google-Abfrage zusammenzufassen (vielleicht mein Foo ist aus):Hinzufügen von Funktionalität zu Schnittstellen/Klassen über C# -Attribute?
Ich versuche, eine Schnittstelle oder eine Klasse einige Funktionalität zu geben, indem Sie nicht die Typdefinition selbst bearbeiten , sondern indem man das Objekt mit einer Schnittstelle verkleidet. Das einfache Beispiel, das ich versuche, ist das Anfügen eines Attributs namens [Notify], für das ein Eigenschaftsänderungsereignis definiert ist, das im Idealfall die Verwendung des Ereignisses in der Schnittstelle/Klasse angibt. Ich habe ich die Öffnung nicht erfolgreich gewesen mit diesem so zu jedem Gerät möglich (falls vorhanden), um das Äquivalent zu erreichen:
[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));
}
}
}
eine IPerson Verwendung:
IPerson person = PersonFactory.create();
person.PropertyChanged += SomeDelegateHere // the center peice
Natürlich, wenn Sie diese kopiert Code, Person wird nicht PropertyChanged haben. Mit oder ohne Attribute, gibt es eine Möglichkeit, die IPerson mehr Funktionalität zu erreichen, ohne die Definition zu ändern (d. H. Keine Schnittstelle oder Basisklasse hinzufügen). Ich verstehe, dass sich auch die Attribute ändern, aber ich bin mit dem Ansatz der Metadaten zufrieden.
Vielen Dank im Voraus für jedes Licht, das vergossen werden kann.