¿Es esto un error en dinámica?
Al implementar el despacho dinámico usandodynamic
en una clase genérica, y el parámetro de tipo genérico es una clase interna privada en otra clase, la carpeta de tiempo de ejecución arroja una excepción.
Por ejemplo
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 }
}
Aquí unRuntimeBinderException
será lanzado con el mensaje
'Dispatcher.CallDispatch (int)' es inaccesible debido a su nivel de protección
La razón de la inaccesibilidad es que el parámetro de tipoT
es el @ privaCallType
cualesDispatcher<T>
No puede acceder. Por lo tanto,CallDispatch
debe ser inaccesible, pero no lo es, porque es accesible comoT
.
¿Es esto un error condynamic
, ¿o se supone que esto no es compatible?