a) Runtime
b) Interpret time
c) Compile time
d) Dynamic linking time
e) Application Initialization time
Розгорнути правильну відповідь з поясненням
Відразу ж можемо прибрати зі списку можливих відповідей варіант b), оскільки C# є компільованою мовою, а отже у нього немає етапу інтерпретації.
Також варто згадати, що ключове слово var не означає, що ми можемо змінювати тип змінної в процесі виконання програми (хоч це і співзвучно з "variant"). Натомість, ключове слово var використовується для створення змінної, не визначаючи її тип явно.
Не варто плутати var і dynamic. Об'єкт з типом dynamic може мати будь-яке значення, обходить статичну перевірку типів і вважається, що він підтримує будь-які операції на етапі компіляції. Конкретний тип змінної присвоюється в runtime, в процесі виконання програми.
Dynamic Linking - це процес зв'язування збірок (Dynamic Link Libraries), за допомогою якого різні процеси можуть використовувати одну і ту ж функціональність, не створюючи їх копії. Процес не стосується типів всередині таких збірок. Детальніше про DLL можна дізнатися тут.
Application initialization - це процес запуску програми. До цього моменту всі статичні типи вже визначені, а середовище виконання буде працювати тільки з динамічними типами і рефлексією.
Отож, правильним варіантом є c).
П.С.: в офіційній документації Microsoft в розділі var у другому реченні вказано, що компілятор визначає і присвоює тип, який найбільше підходить :)