C#面试题更新 2026-08-03

.NET 中的动态语言运行时(DLR)是什么?请说明它的组成以及它是如何为动态类型提供支持的。

考察说明

考查对 DLR 在 .NET 动态类型支持中作用的理解。

回答思路

  1. 【回答框架 1】DLR 是构建在 CLR 之上的动态语言运行时,为动态语言和动态绑定提供支持,包含表达式树、动态调度和绑定器等组件。
  2. 【回答框架 2】它通过动态分派和缓存机制,将动态操作如方法调用和属性访问绑定到具体实现,从而支持动态类型。
  3. 【回答框架 3】在 C# 中使用 dynamic 关键字时,编译器将类型标记为动态,DLR 在运行时根据实际对象类型进行绑定和调用。
  4. 【回答框架 4】DLR 通过 IDynamicMetaObjectProvider 接口允许自定义绑定行为,与 CLR 静态类型系统协同工作。
  5. 【关键点 1】DLR 由表达式树、绑定器和动态调度组成。
  6. 【关键点 2】它通过在运行时解析操作来实现动态类型支持。
  7. 【关键点 3】C# 的 dynamic 依赖 DLR 进行动态绑定。
  8. 【关键点 4】DLR 不改变 CLR 的类型系统,而是扩展了动态行为。
  9. 【易错点 1】不要将 DLR 与反射混为一谈,DLR 更高效且支持动态语言互操作。
  10. 【易错点 2】避免认为所有动态操作都慢,DLR 有缓存优化。