Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 处理从DynamicObject继承的子类时监视非动态方法调用_C#_.net_Oop_Dynamic - Fatal编程技术网

C# 处理从DynamicObject继承的子类时监视非动态方法调用

C# 处理从DynamicObject继承的子类时监视非动态方法调用,c#,.net,oop,dynamic,C#,.net,Oop,Dynamic,假设我有一个继承自DynamicObject的类: public class DynamicBase : DynamicObject { public override bool TryGetMember(GetMemberBinder binder, out object result) { //Yadda yadda yadda } //same for TrySetMember } 然后我有一个子类继承自DynamicBase: public

假设我有一个继承自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=newdynamicbase();
我想知道:

  • 这甚至可以用C#实现
  • 如果DynamicObject是错误的基类;我应该选择IDynamicMetaObjectProvider还是其他什么
  • 如果我需要使用DynamicBase的方法在子类周围创建一个代理,并使用我正在寻找的组合行为,使用类似DynamicProxy的东西来拦截调用

  • 这在4.0中添加了
    动态
    基础结构时是不可能的。简单地实现
    IDynamicMetaObjectProvider
    并不意味着您的类可以完全否决.NET的类型/成员解析。这仅仅意味着,当在动态上下文中引用实例时,无法以静态方式解析的调用将返回到动态提供程序

    var someInstance = new DynamicBase<ChildClass>();