Ist [CallerMemberName] langsam im Vergleich zu Alternativen bei der Implementierung von INotifyPropertyChanged?

Gibt es gute Artikel, die nahelegen, dass verschiedene Möglichkeiten für die Implementierung von INotifyPropertyChanged.

Betrachten Sie das folgende einfache Implementierung:

class BasicClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private void FirePropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

    private int sampleIntField;

    public int SampleIntProperty
    {
        get { return sampleIntField; }
        set
        {
            if (value != sampleIntField)
            {
                sampleIntField = value;
                FirePropertyChanged("SampleIntProperty"); //ouch ! magic string here
            }
        }
    }
}

Möchte ich ersetzen Sie es mit diesem:

using System.Runtime.CompilerServices;

class BetterClass : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    //Check the attribute in the following line :
    private void FirePropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

    private int sampleIntField;

    public int SampleIntProperty
    {
        get { return sampleIntField; }
        set
        {
            if (value != sampleIntField)
            {
                sampleIntField = value;
                //no "magic string" in the following line :
                FirePropertyChanged();
            }
        }
    }
}

Aber manchmal lese ich, dass die [CallerMemberName] Attribut hat schlechte Leistungen im Vergleich zu alternativen. Ist das wahr und warum? Es tut reflektion verwenden?

InformationsquelleAutor der Frage JYL | 2014-03-22

Schreibe einen Kommentar