4.动态类型与反射

简述DLR。

  • DLR全称Dynamic Language Runtime,即动态语言运行时。
  • DLR是添加到CLR的一系列服务,它允许添加动态语言,使C#具备动态类型的功能。
  • DLR允许动态语言在运行时发现类型,而不进行编译时检查。

dynamic和var两者之间有什么不同?

  • dynamic是动态类型,其定义变量的数据类型是在运行时决定的,可以多次改变。
  • var是类型推断关键字,其定义变量的数据类型是在编译时决定的,一旦确定就无法再改变。
  • dynamic可以在类中的任意位置声明使用,而var只能在方法内部使用。

创建自定义的动态对象有哪些途径,它们之间有什么区别?

  • 有两种方式可以创建自定义的动态对象:从DynamicObject类中派生;使用ExpandoObject
  • 它们的区别在于:使用DynamicObject需要做的工作比较多,因为必须重写几个方法,而ExpandoObject是一个可立即使用的密封类。

简述反射的概念。

  • 反射就是从一个对象的外部去了解对象内部的构造。
  • 反射也是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。

有几种方式可以获取类型的引用,分别描述一下。

  1. 使用C#typeof运算符,这个运算符的参数是类型的名称。
  2. 使用GetType()方法,所有类都会从System.Object继承这个方法。
  3. 使用Type的静态方法GetType()获取指定类型的引用。

什么是“晚期绑定”?

  • 晚期绑定是一种创建一个给定类型的实例并在运行时调用其成员,而不需要在编译时知道他存在的一种技术。

你可能感兴趣的:(4.动态类型与反射)