Как добиться отправки во время компиляции с помощью дженериков?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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