从属性的getter调用方法

时间:2018-03-18 15:46:44

标签: c# reflection attributes

有没有一种方法可以定义一个方法,在每种情况下都调用,当调用类中任何属性的getter时?

该类是一个基类,我想实现它的各种SubClasses,但每个都应该有共同点,无论其getter函数应该访问哪个属性,都应该在属性之前执行一个动作。返回。

2 个答案:

答案 0 :(得分:4)

不,除非你把它编码到每个Getter中,否则你放弃" Plain Old C#Classes"完全基于读取审计的数据集构建数据模型范例。如果你沿着这条路走下去,你只需拥有每个"数据类"是一个获取/设置委托的字典,并通过这些委托访问其数据值。它不是一个不常见的设计,但它不再遵循OO范式。

示例(伪代码)

public class MonitoredCustomerObject
{
    // Assumption that the Get/Set delegates are stored in a simple Tuple.
    private Dictionary<string, Tuple<delegate,delegate>> getterSetterDict = new ...

    public GetValue(string key)
    {
        executeMyOnReadCode();
        return getterSetterDict[key].Item1();
    }

    public SetValue(string key)
    {
        executeMyOnWriteCode();
        getterSetterDict[key].Item2();
    }
}

答案 1 :(得分:0)

你可以假装这个,或者你可以写一个Fody扩展来做到这一点。例如,您可以将基类定义为:

public abstract class MyBaseClass
{
    public object MyProperty
    {
        get
        {
            RunSomeMethod();
            return MyPropertyValue;    
        }
    }
    protected abstract object MyPropertyValue { get; }
}

哪种“类型”迫使实施者将其写成:

public class MyDerivedClass : MyBaseClass 
{
    protected override object MyPropertyValue
    {
        get
        {
            return SomeObjectValue();
        }
    }
}

派生类仍然可以使用new隐藏基类属性,但至少会导致开发人员明确意识到他们正在做一些无意识的事情。