Здравствуйте, dennis.yolkin, Вы писали:
DY>Как реализовать метод f() без использования reflection?
Можно примерно так:
static void f(object obj)
{
bool success = false;
try
{
InvokeFooIfObjIsC((dynamic)obj, out success);
return;
}
catch (RuntimeBinderException)
{
if(success)
throw;
}
// obj не является C<T>, делаем что-то другое
}
static void InvokeFooIfObjIsC<T>(C<T> c, out bool success) where T : Iface
{
success = true;
c.foo();
}
Хотя тут тоже есть скрытый рефлекшн. Но, с другой стороны, он внутри DLR и хитро оптимизирован с использованием кеширования и т.д.