gpt4 book ai didi

c# - 使用从 DynamicObject 继承的子类时监视非动态方法调用

转载 作者:行者123 更新时间:2023-11-30 18:07:59 25 4
gpt4 key购买 nike

假设我有一个继承自 DynamicObject 的类:

public class DynamicBase : DynamicObject
{
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
//Yadda yadda yadda
}

//same for TrySetMember
}

然后我有一个继承自 DynamicBase 的子类:

public class ChildClass : DynamicBase
{
public void SomeProperty { get; set; }
}

我想自动监视子类中“SomeProperty”的 getter 和 setter。目前,因为 SomeProperty 存在于子对象中,方法不会路由到 TryGet/SetMember 或 DynamicObject 的任何其他覆盖。

理想情况下,我希望在基类的用户实例化对象后出现这种行为,如下所示:

var someInstance = new ChildClass();
someInstance.SomeProperty = "someValue" //Monitored somehow in DynamicBase

与必须创建 DynamicBase 的实例相反,将子项作为类型传递(这就是 Moq 使用 DynamicProxy 创建拦截器的方式):

var someInstance = new DynamicBase<ChildClass>();

我想知道是否:

  1. 这甚至可以用 C# 实现?
  2. 如果 DynamicObject 是错误的基类;我应该下拉到 IDynamicMetaObjectProvider 还是其他?
  3. 如果我需要采用 DynamicBase 的路线来围绕 ChildClass 创建一个具有我正在寻找的组合行为的代理,使用 DynamicProxy 之类的东西来拦截调用?

最佳答案

这对于 4.0 中添加的 dynamic 基础架构是不可能的。简单地实现 IDynamicMetaObjectProvider 并不意味着您的类可以完全否决 .NET 的类型/成员解析。这只是意味着当在动态上下文中引用一个实例时,无法解析的调用否则静态将回退到动态提供者。

关于c# - 使用从 DynamicObject 继承的子类时监视非动态方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3594925/

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