当在泛型类上实现动态调度dynamic
,并且泛型类型参数是另一个类的私有内部类时,运行时绑定器会抛出异常。
例如:
using System;
public abstract class Dispatcher<T> {
public T Call(object foo) { return CallDispatch((dynamic)foo); }
protected abstract T CallDispatch(int foo);
protected abstract T CallDispatch(string foo);
}
public class Program {
public static void Main() {
TypeFinder d = new TypeFinder();
Console.WriteLine(d.Call(0));
Console.WriteLine(d.Call(""));
}
private class TypeFinder : Dispatcher<CallType> {
protected override CallType CallDispatch(int foo) {
return CallType.Int;
}
protected override CallType CallDispatch(string foo) {
return CallType.String;
}
}
private enum CallType { Int, String }
}
在这里,RuntimeBinderException
将与消息一起抛出
'Dispatcher.CallDispatch(int)' 由于其保护级别而无法访问
无法访问的原因是类型参数是无法访问T
的私有参数。因此,必须是不可访问的 - 但它不是,因为它可以作为.CallType
Dispatcher<T>
CallDispatch
T
这是一个错误dynamic
,还是不应该支持?