C# 动态绑定
2018-01-22 17:09 更新
C# 动态绑定
动态绑定会将类型,成员和操作的解析过程从编译时延迟到运行时。
使用上下文关键字 dynamic
声明动态类型:
dynamic d = GetSomeObject();
d.OneMethod();
动态类型期望 d
的运行时类型具有OneMethod
方法。
由于d是动态的,编译器会将OneMethod绑定到d,直到运行时。
动态转化
动态类型具有来自所有其他类型的隐式转换:
int i = 7;
dynamic d = i;
long j = d; // No cast required (implicit conversion)
要使转换成功,动态对象的运行时类型必须可隐式转换为目标静态类型。
以下示例会抛出RuntimeBinderException,因为int不能隐式转换为short:
int i = 7;
dynamic d = i;
short j = d; // throws RuntimeBinderException
var vs dynamic
var
使编译器找出类型。
使运行时确定类型。dynamic
为了显示:
dynamic x = "hello"; // Static type is dynamic, runtime type is string
var y = "hello"; // Static type is string, runtime type is string
int i = x; // Runtime error
int j = y; // Compile-time error
用 var
声明的变量的静态类型可以是动态的:
dynamic x = "hello";
var y = x; // Static type of y is dynamic
int z = y; // Runtime error
动态表达式
字段,属性,方法,事件,构造函数,索引器,运算符和转换都可以动态调用。
涉及动态操作数的表达式通常本身是动态的:
dynamic x = 2;
var y = x * 3; // Static type of y is dynamic
将动态表达式转换为静态类型会生成静态表达式:
dynamic x = 2;
var y = (int)x; // Static type of y is int
构造函数调用总是产生静态表达式。
在此示例中,x静态类型为StringBuilder:
dynamic capacity = 1;
var x = new System.Text.StringBuilder (capacity);
以上内容是否对您有帮助:
← C# 匿名类型
更多建议: