C# 使用元数据获取对调用特定方法的类的引用

C# 使用元数据获取对调用特定方法的类的引用,c#,C#,当使用INotifyPropertyChanged时,可以执行类似的操作来获取调用事件的方法所调用的属性的名称 public void RaisePropertyChanged([CallerMemberName] string prop = "") { if (PropertyChanged != null) { PropertyChanged(new object(), new PropertyChangedEventArgs

当使用INotifyPropertyChanged时,可以执行类似的操作来获取调用事件的方法所调用的属性的名称

 public void RaisePropertyChanged([CallerMemberName] string prop = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(new object(), new PropertyChangedEventArgs(prop));

        }

    }
是否还有其他类型的属性可用于获取对包含该属性的类的引用?我希望能够从任何viewmodel类的任何属性调用RaisePropertyChanged。我所有的viewmodel类都是从一个基础派生的,所以我想我可以这样做

 public void RaisePropertyChanged([CallerMemberName] string prop = "", [CallerClassRef] VmBase base = null)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(base, new PropertyChangedEventArgs(prop));

        }

    }
尝试使用外接程序。它帮助您将INotifyPropertyChanged实现注入IL代码

源代码:

[ImplementPropertyChanged]
public class Person 
{        
    public string GivenNames { get; set; }
    public string FamilyName { get; set; }

    public string FullName
    {
        get
        {
            return string.Format("{0} {1}", GivenNames, FamilyName);
        }
    }
}
编译时

public class Person : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    string givenNames;
    public string GivenNames
    {
        get { return givenNames; }
        set
        {
            if (value != givenNames)
            {
                givenNames = value;
                OnPropertyChanged("GivenNames");
                OnPropertyChanged("FullName");
            }
        }
    }

    string familyName;
    public string FamilyName
    {
        get { return familyName; }
        set 
        {
            if (value != familyName)
            {
                familyName = value;
                OnPropertyChanged("FamilyName");
                OnPropertyChanged("FullName");
            }
        }
    }

    public string FullName
    {
        get
        {
            return string.Format("{0} {1}", GivenNames, FamilyName);
        }
    }

    public virtual void OnPropertyChanged(string propertyName)
    {
        var propertyChanged = PropertyChanged;
        if (propertyChanged != null)
        {
            propertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

源代码复制自:

访问当前类引用的关键字称为:

无论您派生这个类多少次,这都是有效的,这个函数总是在这个实例上被调用的

public void RaisePropertyChanged([CallerMemberName] string prop = "")
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(prop));
    }
}