gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:11:43 28 4
gpt4 key购买 nike

C# - .net 3.5

我有一个继承自同一个基类的类族。我希望在派生类中的属性被访问(获取或设置)时调用基类中的方法。但是,我不想在每个属性中编写代码来调用基类...相反,我希望有一种声明性的方式将此事件“下沉”到基类中。

为需求添加一些趣味,我确实需要确定被访问的属性的名称、属性值及其类型。

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

非常感谢任何想法!

最佳答案

您无法自动完成,但您几乎可以免费获得 95%。这是面向方面编程的经典案例。查看PostSharp , 其中有 OnFieldAccessAspect类(class)。以下是您可能会如何解决问题:

[Serializable]
public class FieldLogger : OnFieldAccessAspect {
public override void OnGetValue(FieldAccessEventArgs eventArgs) {
Console.WriteLine(eventArgs.InstanceTag);
Console.WriteLine("got value!");
base.OnGetValue(eventArgs);
}

public override void OnSetValue(FieldAccessEventArgs eventArgs) {
int i = (int?)eventArgs.InstanceTag ?? 0;
eventArgs.InstanceTag = i + 1;
Console.WriteLine("value set!");
base.OnSetValue(eventArgs);
}

public override InstanceTagRequest GetInstanceTagRequest() {
return new InstanceTagRequest("logger", new Guid("4f8a4963-82bf-4d32-8775-42cc3cd119bd"), false);
}
}

现在,任何继承自 FieldLogger 的东西都将获得相同的行为。急!

关于c# - 任何时候访问类属性(获取或设置)时执行的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1853727/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com