C#中用dynamic调用Contains方法时,会使用反射还是自动类型转换?
问题解答
这段代码里,C#既不会通过反射获取Contains方法,也不是先把dynamic手动转换为string再调用方法,而是通过**动态语言运行时(DLR)**在运行时进行延迟绑定:
- 编译阶段,编译器不会对
dynamic类型的代码做类型检查,只会生成一个占位的调用点。 - 运行时,DLR会先确定
target和arg的实际类型(这里都是string),然后直接找到string.Contains(string)这个方法并调用,整个过程和直接写((string)target).Contains((string)arg)的执行逻辑一致,但DLR会自动完成类型的解析匹配,不需要手动显式转换。
简单来说,DLR会在运行时识别出变量的真实类型,然后直接调用该类型的对应方法,并非依赖反射机制。
内容的提问来源于stack exchange,提问作者Jiang Tim
相关产品推荐
相关产品推荐

