ジェネリック クラスを使用して動的ディスパッチを実装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
、メッセージとともに a がスローされます
「Dispatcher.CallDispatch(int)」は、保護レベルが原因でアクセスできません
アクセスできない理由は、型パラメーターT
がアクセスできないプライベートCallType
であるDispatcher<T>
ためです。したがって、CallDispatch
アクセスできない必要がありますが、 としてアクセスできるため、そうではありませんT
。
これは のバグdynamic
ですか、それともサポート対象外ですか?