Heim >Backend-Entwicklung >C++ >Wie löst man in C# ein benutzerdefiniertes Ereignis aus, wenn sich ein Eigenschaftswert ändert?

Wie löst man in C# ein benutzerdefiniertes Ereignis aus, wenn sich ein Eigenschaftswert ändert?

Linda Hamilton
Linda HamiltonOriginal
2025-01-01 01:16:10985Durchsuche

How to Raise a Custom Event When a Property Value Changes in C#?

So lösen Sie ein Ereignis aus, wenn sich der Wert einer Eigenschaft ändert

Sie haben eine Eigenschaft mit dem Namen ImageFullPath1, die Sie verwenden möchten löst ein Ereignis aus, wenn sich sein Wert ändert. Obwohl Ihnen die Verwendung der Schnittstelle INotifyPropertyChanged bekannt ist, bevorzugen Sie die Verwendung von Ereignissen für diesen Zweck.

Die Schnittstelle INotifyPropertyChanged wird tatsächlich mit Ereignissen implementiert. Es hat ein einziges Mitglied, PropertyChanged, ein Ereignis, das von Verbrauchern abonniert werden kann.

Sichere Implementierung:

Der folgende Code Das Snippet demonstriert eine sichere Implementierung der Schnittstelle INotifyPropertyChanged mit einem zusätzlichen Ereignis für ein bestimmtes Ereignis Eigenschaft (ImageFullPath):

public class MyClass : INotifyPropertyChanged
{
    private string imageFullPath;

    protected void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, e);
    }

    protected void OnPropertyChanged(string propertyName)
    {
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }

    public string ImageFullPath
    {
        get { return imageFullPath; }
        set
        {
            if (value != imageFullPath)
            {
                imageFullPath = value;
                OnPropertyChanged("ImageFullPath");
            }
        }
    }

    protected void OnImageFullPathChanged(EventArgs e)
    {
        EventHandler handler = ImageFullPathChanged;
        if (handler != null)
            handler(this, e);
    }

    public event PropertyChangedEventHandler PropertyChanged;
    public event EventHandler ImageFullPathChanged;
}

Diese Implementierung stellt Folgendes sicher:

  • Abstrakte Benachrichtigungsmethoden für Eigenschaftsänderungen zur einfachen Anwendung auf andere Eigenschaften
  • Kopiert die PropertyChanged delegieren, bevor Sie es aufrufen, um Race Conditions zu vermeiden
  • Korrekte Implementierung von IOtifyPropertyChanged Schnittstelle

CallerMemberAttribute in .NET 4.5:

Für .NET 4.5 und höher das CallerMemberAttribute kann verwendet werden, um die hartcodierte Zeichenfolge für die Eigenschaft zu eliminieren Namen im Quellcode:

protected void OnPropertyChanged(
    [System.Runtime.CompilerServices.CallerMemberName] string propertyName = "")
{
    OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}

public string ImageFullPath
{
    get { return imageFullPath; }
    set
    {
        if (value != imageFullPath)
        {
            imageFullPath = value;
            OnPropertyChanged();
        }
    }
}

Das obige ist der detaillierte Inhalt vonWie löst man in C# ein benutzerdefiniertes Ereignis aus, wenn sich ein Eigenschaftswert ändert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn