在任何时候访问类属性(获取或设置)时执行的方法?

Jef*_*eff 5 c# generics reflection delegates .net-3.5

C# - .net 3.5

我有一系列继承自同一基类的类.我希望在访问(获取或设置)derrived类中的属性时调用基类中的方法.但是,我不想在每个属性中编写代码来调用基类...相反,我希望有一种声明性方法可以将此活动"接收"到基类中.

在需求中添加一些spice,我需要确定访问的属性的名称,属性值及其类型.

我认为解决方案将是委托,泛型和反射的巧妙组合.我可以设想在运行时创建某种类型的委托分配数组,但是在构造函数中迭代MemberInfo会影响性能,而不是我想要的.同样,我希望有更直接的"声明"方式来做到这一点.

任何想法都非常感谢!

slu*_*ter 2

我不相信可以通过声明的方式做到这一点,我从未见过这样做。不过,您可以做的是在基类上实现 INotifyPropertyChanged 接口,并在基类中实现该接口。像这样的东西:

public class A : INotifyPropertyChanged
{

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    #endregion

    protected virtual void RaiseOnPropertyChanged(object sender, string propertyName)
    {
        if (this.PropertyChanged != null)
            PropertyChanged(sender, new PropertyChangedEventArgs(propertyName);
    }

    public A()
    {
        this.PropertyChanged += new PropertyChangedEventHandler(A_PropertyChanged);
    }

    void A_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        //centralised code here that deals with the changed property
    }
}


public class B : A
{
    public string MyProperty
    {
        get { return _myProperty; }
        set 
        {
            _myProperty = value;
            RaiseOnPropertyChanged(this, "MyProperty");
        }
    }

    public string _myProperty = null;
}
Run Code Online (Sandbox Code Playgroud)