Что такое compile time?
Compile time - это значит "во время компиляции".
Тоесть в результате в программу должен быть зашит результат.

Что именно хочет составитель задания, и как он себе это представляет - без понятия.
Compile time - выбор в коде, во время компиляции (comple time). То есть, компилятор видит код и понимает, какой тип нужен при создании объекта.
var figure = new Circle(); // тип известен заранее (при компиляции)
Console.WriteLine(figure.CalcArea());

В отличие от compile time. может быть run time - во время работы программы, тип объекта выбирается в зависимости от некоторых условий (ввод пользователя, ответ от сервера, настройки в конфиг-файле, изменилась фаза луны). 
Самый простой вариант:
var type = Console.ReadLine();
Figure figure = null;
switch (type.ToLower())
{
    case "square": figure = new Square(10); break;
    case "rectangle": figure = new Rect(10, 20); break;
    case "circle": figure = new Circle(10); break;
}
if (figure != null)
{
    Console.WriteLine(figure.CalcArea());
}
else
{
    Console.WriteLine("Неверный тип фигуры");
}
Выбор делается в рантайме между заранее известными типами -  конкретные возможные типы указаны в коде (в компайлтайме).

Реальный тип (имя класса) можно спросить у пользователя (или из настройки), и вызвать его активатором:
var typeName = Console.ReadLine();
var type = Type.GetType(typeName);
if (type != null)
    var figure = (Figure)Activator.CreateInstance(type);
    Console.WriteLine(figure.CalcArea());
}
else
{
    Console.WriteLine("Неверный тип");
}
Но тип должен быть полным, с пространством имён, то есть, не "Square", а "MyApp.Figures.Square". Таким образом можно создать объект типа, которого вообще не было во время компиляции - например, тип был объявлен в отдельной библиотеке и добавлен в программу после компиляции (так делаются плагины, например). Но для плагинов код будет посложнее.