Я узнал от here, что динамические переменные не могут получить доступ к методам на интерфейсах, которые они явно реализуют. Есть ли простой способ вызвать методы интерфейса, когда я не знаю параметр типа T
во время компиляции?Реализация динамического и явного общего интерфейса
interface I<T>
{
void Method1(T t);
}
class C<T> : I<T>
{
void I<T>.Method1(T t)
{
Console.WriteLine(t);
}
}
static void DoMethod1<T>(I<T> i, T t)
{
i.Method1(t);
}
void Main()
{
I<int> i = new C<int>();
dynamic x = i;
DoMethod1(x, 1); //This works
((I<int>)x).Method1(2); //As does this
x.Method1(3); //This does not
}
я не знаю параметр типа T
, так (насколько я знаю), я не могу бросить свою динамическую переменную x
. У меня много методов в интерфейсе, поэтому не нужно создавать соответствующие методы DoXXX()
.
Редактировать: Обратите внимание: я не контролирую и не могу изменить C
или I
.
я, вероятно, может сделать что-то с отражением, но тип 'C' реализует несколько общие интерфейсы, и существуют различные перегруженные некоторые из методов, так что это не легко. – Rob