Re: Generics
От: nikov США http://www.linkedin.com/in/nikov
Дата: 29.09.10 14:28
Оценка:
Здравствуйте, 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 и хитро оптимизирован с использованием кеширования и т.д.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.