Isso é um bug dinâmico?
Ao implementar o envio dinâmico usandodynamic
em uma classe genérica, e o parâmetro de tipo genérico é uma classe interna privada em outra classe, o fichário de tempo de execução lança uma exceçã
Por exemplo
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 }
}
Aqui umRuntimeBinderException
será exibido com a mensagem
'Dispatcher.CallDispatch (int)' está inacessível devido ao seu nível de proteção
O motivo da inacessibilidade é que o parâmetro typeT
é o privadoCallType
qualDispatcher<T>
Não pode ser acessado. Portanto,CallDispatch
deve estar inacessível - mas não é, porque é acessível comoT
.
Isso é um erro comdynamic
, ou isso não deve ser suportado?