深入理解 c# 第十四章 使用动态类型推断 纯托管代码中的动态类型

     class Reflection
    {
        private static bool AddConditionallyImpl<T>(IList<T> list, T item)
        {
            if (list.Count > 10)//没执行 普通的静态类型代码
            {
                list.Add(item);
                return true;
            }
            return false;
        }

        public static bool AddConditionally(dynamic list, dynamic item)
        {
            return AddConditionallyImpl(list, item);//动态调用辅助方法
        }
        static void Main()//纯托管代码中的动态类型 使用动态类型推断
        {
            object list = new List<string> { "x", "y" };
//list Count = 2			
            object item = "z";
//"z"			
            Console.WriteLine(AddConditionally(list, item));//执行 AddConditionally
			//将调用AddConditionallyImple<string>
        }
    }


  使用过一些类似动态类型的东西,即使执行代码不是我们自己编写的。数据绑定就是最简单的
示例。为ListControl.DisplayMember这样的成员指定值时,实际上要求框架运行时根据其名称
找个属性。如果在自己的代码直接使用反射,你同样是在使用只有执行时才可知的信息。
  反射容易出错,即使可以运行,也需要投入额外的精力对其进行优化。在某些情况下,动态类型
可以完全取代反射,并且速度也可能更快。
  执行式类型推断
  如果想要做的不仅仅是调用单个方法,那么最好将所有额外的工作包装在一个泛型方法内,然后
动态地调用该泛型方法,而用静态类型编写所有剩余代码
  假设有系统的其他部分给定了某种类型的列表及一个新元素,它们是兼容的,但我们无法静态地
知道它们的类型。这是完全有可能发生的--比如反序列化。无论如何,代码会在列表的元素个数少于
10个时,将一个新的元素添加到列表的末尾。方法将返回元素是否添加成功。  


输出
False

猜你喜欢

转载自blog.csdn.net/eyetired/article/details/80368900