代码之家  ›  专栏  ›  技术社区  ›  SnickersAreMyFave

C 4.0:动态,从dynamicObject继承

  •  4
  • SnickersAreMyFave  · 技术社区  · 14 年前

    假设我有这个:

    dynamic foo = new Foobar();
    

    我有这个:

    public class Foobar : DynamicObject
    {
    
    }
    

    问题是,是否可以重写 DynamicObject 所以这个代码:

    string name = new Foobar().Name
    

    不投掷 Exception 在运行时?我想回来 default 对于 name 如果是 Name 不是成员。

    可能吗?我需要覆盖什么?

    3 回复  |  直到 14 年前
        2
  •  1
  •   Reed Copsey    14 年前
        3
  •  1
  •   Sergey Teplyakov    14 年前

    class Foobar : DynamicObject 
    {
        private object m_object;
    
        public ExposedObjectSimple(object obj)
        {
            m_object = obj;
        }
    
        public override bool TryInvokeMember(
                InvokeMemberBinder binder, object[] args, out object result)
        {
            //Trying to find appropriate property
            var property = m_object.GetType().GetProperty("Name", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
            if (property != null)
            {
                result = (string)property.GetValue(b, null);
                return true;
            }
    
            result = SomeDefaultName;
            return true;
        }
    }