Код: Выделить всё
public interface IAbstraction
{
public void Initialize();
}
public sealed class Implementation : IAbstraction
{
public void Initialize()
{
}
}
public sealed class GenericUsage where T : class, IAbstraction
{
private readonly T _abstraction;
public GenericUsage(T abstraction)
{
_abstraction = abstraction;
}
public void CallAction()
{
_abstraction.Initialize();
}
}
public static void Main()
{
var genericUsage = new GenericUsage(new Implementation());
genericUsage.CallAction();
}
Со стороны JIT Asm я не вижу девиртуализации. Вызов по-прежнему происходит через vtable.
Есть ли шанс реализовать диспетчеризацию во время компиляции с помощью дженериков? Возможно, я что-то упускаю. Если нет, то почему приведенный выше пример не работает?
Подробнее здесь: https://stackoverflow.com/questions/790 ... a-generics
Мобильная версия