在“this”上访问动态成员

时间:2015-04-17 07:30:10

标签: c# inheritance dynamic

我有一个类,让它命名为DynamicBase,看起来基本上是这样的:

public class DynamicBase: DynamicObject
{
    public override bool TryGetMember(System.Dynamic.GetMemberBinder binder, out object result)
    {
         // doing some magic stuff here, to read Dynamic Properties from this object
    }
}

我可以使用此类的实例,如

dynamic blah = new DynamicBase();
Console.WriteLine(blah.FooProperty);

现在我还有一个Child Class调用DynamicChild,它在运行时编译并且应该访问动态属性。生成的类基本上看起来像这样:

public class DynamicChild: DynamicBase
{
    public void DoSomeStuff()
    {
        Console.WriteLine(FooProperty)
    }
}

是否可以编译此代码(因为DynamicBase实现了DynamicObject,会有一种访问FooProperty的机制)?

1 个答案:

答案 0 :(得分:1)

不,不幸的是,这是不可能的。

继承DynamicObject只会为类型添加一些额外的管道,以便它可以动态添加内容,这可以在动态上下文中使用。

但是,要实际使用动态添加的内容,您需要在动态上下文中使用该类型的对象。

您拥有的代码:

public void DoSomeStuff()
{
    Console.WriteLine(FooProperty)
}

不使用dynamic,因此不在动态上下文中,因此编译器将尝试静态编译。

强制动态上下文的唯一方法是转发dynamic@leppie在评论中说:

public void DoSomeStuff()
{
    Console.WriteLine(((dynamic)this).FooProperty)
}