考虑到很大程度上与语言无关的 .NET Framework(包括类库和运行时)以及 DLR 支持多种语言的事实,我发现子类化的 System.Dynamic.DynamicObject
在C# 应用程序实际上会引发 CSharp
命名空间中的异常。当尝试访问运行时不存在的 dynamic
成员时,我捕获以下异常:
{Name = "RuntimeBinderException"FullName = "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException"}
RuntimeBinderException
异常是否特定于 C#?如果是,则每种语言必须实现自己的绑定(bind)器异常吗?让我感到奇怪的是为什么异常不在更通用的命名空间中,这让我想知道“发生了什么”?
我在 .NET 4.5 上的 VS 2012 Express 中以 Debug模式运行。该应用程序是用 C# 构建的。
最佳答案
您在 CSharp
中遇到异常的原因命名空间是因为 DLR 已确定 dynamic
有问题的对象是一个 C# 对象,并且已将其传递给 C# 运行时绑定(bind)器进行处理。
每种支持 DLR 的语言都需要自己实现该运行时绑定(bind)系统,并且每种语言都依赖于该语言的语义。例如,像 JScript 这样支持即时属性和方法创建的语言可能不会在每次绑定(bind)失败时抛出异常,而是设置或返回一个新属性。
所以答案是,是的,每种想要在 DLR 绑定(bind)失败时抛出异常的语言都必须单独实现它。
(另一个例子:VB.NET 对动态对象的支持与现有的后期绑定(bind)支持完全相同;您会从 DLR 绑定(bind)失败中得到与后期绑定(bind) IDispatch
失败相同的错误,例如例如,因此不需要单独的异常。)
关于c# - CSharp 命名空间中的 RuntimeBinderException 是否表示 DLR 语言依赖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14679259/