vereinfachen inotifyPropertychanged Implementierung in C#
InotifyPropertyChanged
ist für die Datenbindung und Eigenschaften von Eigenschaften wesentlich, aber manuelle Implementierung kann umständlich sein. Während eine vereinfachte Syntax wie {get; Satz; benachrichtigen;}
wäre ideal, es ist nicht in C#integriert. Lassen Sie uns Möglichkeiten untersuchen, um den Prozess zu optimieren.
Ein Ansatz beinhaltet eine Basisklasse mit einer generischen setfield
Methode:
public class Data : INotifyPropertyChanged
{
protected virtual void OnPropertyChanged(string propertyName);
protected bool SetField(ref T field, T value, string propertyName);
public string Name
{
get { return name; }
set { SetField(ref name, value, "Name"); }
}
// ... other properties
}
Dies reduziert die Kesselplatte für Eigenschaften. C# 5's CallmemberName
-Tribute vereinfacht dies weiter:
protected bool SetField(ref T field, T value, [CallerMemberName] string propertyName = null);
public string Name
{
get { return name; }
set { SetField(ref name, value); }
}
c# 6 und später zusätzliche Verbesserungen für noch prägnanteres Code.
automatisieren codesgeneration
Für die vollständige Automatisierung betrachten Tools wie propertyChanged.fody
. Während eine externe Abhängigkeit erforderlich ist, beseitigt dies manuelle PropertyChanged
Ereignis, das vollständig erhöht wird. Dies ist eine leistungsstarke Option für größere Projekte. Die Auswahl zwischen manueller Optimierung (unter Verwendung einer Basisklasse) und die automatisierte Codegenerierung hängt von der Projektgröße und der Präferenz für externe Abhängigkeiten ab.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3