Как добиться отправки во время компиляции с помощью дженериков?C#

Место общения программистов C#
Anonymous
Как добиться отправки во время компиляции с помощью дженериков?

Сообщение Anonymous »

Недавно я пытался реализовать диспетчеризацию во время компиляции с использованием дженериков (пример ниже)

Код: Выделить всё

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();
}
Как видите, я также явно использовал ключевое слово «sealed» как сигнал о том, что нет никаких шансов, что тип, который будет передан в конструктор, будет отличаться от который используется в Generic.
Со стороны JIT Asm я не вижу девиртуализации. Вызов по-прежнему происходит через vtable.
Есть ли шанс реализовать диспетчеризацию во время компиляции с помощью дженериков? Возможно, я что-то упускаю. Если нет, то почему приведенный выше пример не работает?

Подробнее здесь: https://stackoverflow.com/questions/790 ... a-generics

Вернуться в «C#»