有没有一种方法可以定义一个方法,在每种情况下都调用,当调用类中任何属性的getter时?
该类是一个基类,我想实现它的各种SubClasses,但每个都应该有共同点,无论其getter函数应该访问哪个属性,都应该在属性之前执行一个动作。返回。
答案 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
隐藏基类属性,但至少会导致开发人员明确意识到他们正在做一些无意识的事情。