简述DLR。
-
DLR
全称Dynamic Language Runtime
,即动态语言运行时。 -
DLR
是添加到CLR的一系列服务,它允许添加动态语言,使C#具备动态类型的功能。 -
DLR
允许动态语言在运行时发现类型,而不进行编译时检查。
dynamic和var两者之间有什么不同?
-
dynamic
是动态类型,其定义变量的数据类型是在运行时决定的,可以多次改变。 -
var
是类型推断关键字,其定义变量的数据类型是在编译时决定的,一旦确定就无法再改变。 -
dynamic
可以在类中的任意位置声明使用,而var
只能在方法内部使用。
创建自定义的动态对象有哪些途径,它们之间有什么区别?
- 有两种方式可以创建自定义的动态对象:从
DynamicObject
类中派生;使用ExpandoObject
。 - 它们的区别在于:使用
DynamicObject
需要做的工作比较多,因为必须重写几个方法,而ExpandoObject
是一个可立即使用的密封类。
简述反射的概念。
- 反射就是从一个对象的外部去了解对象内部的构造。
- 反射也是.NET中的重要机制,通过反射,可以在运行时获得程序或程序集中每一个类型(包括类、结构、委托、接口和枚举等)的成员和成员的信息。
有几种方式可以获取类型的引用,分别描述一下。
- 使用
C#
的typeof
运算符,这个运算符的参数是类型的名称。 - 使用
GetType()
方法,所有类都会从System.Object
继承这个方法。 - 使用
Type
的静态方法GetType()
获取指定类型的引用。
什么是“晚期绑定”?
- 晚期绑定是一种创建一个给定类型的实例并在运行时调用其成员,而不需要在编译时知道他存在的一种技术。