1

是否有一种简单的方法可以为 DynamicObject 或 ExpandoObject 的子类创建类方法?

回归反思是唯一的方法吗?

我的意思是:-

class Animal : DynamicObject {
}

class Bird : Animal {
}

class Dog : Animal {
}

Bird.Fly = new Action (()=>Console.Write("Yes I can"));

在这种情况下,Bird.Fly 应用于 Bird 类而不是任何特定实例。

4

2 回答 2

2

不,没有动态类范围的方法。您可以做的最接近的事情是在子类上静态声明一个动态单例。

class Bird : Animal {
    public static readonly dynamic Shared = new ExpandoObject();


}

Bird.Shared.Fly = new Action (()=>Console.Write("Yes I can"));
于 2012-08-22T14:08:07.540 回答
1
 public class Animal : DynamicObject
    {
        Dictionary<string, object> dictionary = new Dictionary<string, object>();

        public override bool TryGetMember(
        GetMemberBinder binder, out object result)
        {
            string name = binder.Name.ToLower();
            return dictionary.TryGetValue(name, out result);
        }

        public override bool TrySetMember(SetMemberBinder binder, object value)
        {
            dictionary[binder.Name.ToLower()] = value;
            return true;
        }
    }
    public class Bird : Animal
    {

    }

然后将其称为您的示例:

dynamic obj = new Bird();
            obj.Fly = new Action(() => Console.Write("Yes I can"));

            obj.Fly();

有关更多信息,请查看DynamicObject

于 2012-08-21T15:44:02.187 回答