Который является эквивалентом объявления С# класса delphi "class of" (тип класса)?
В delphi я могу объявить тип такого класса
type
TFooClass = class of TFoo;
TFoo=class
end;
Каков эквивалент С# для этого объявления?
Ответ 1
Ближе всего вы можете получить в С# тип Type, который содержит метаданные о типе.
public class A { }
public static int Main(string[] args)
{
Type b = typeof(A);
}
Это не совсем то же самое. В Delphi "тип othertype" сам по себе является типом, который вы можете назначить переменной. В С# "тип othertype" - это экземпляр System.Type, который может быть назначен для любых переменных типа System.Type.
В качестве примера, в Delphi вы можете сделать это:
type
TAClass = class of TA;
TA = class
public
class procedure DoSomething;
end;
var x : TAClass;
begin
x := TA;
x.DoSomething();
end;
Вы не можете сделать что-либо подобное на С#; вы не можете вызывать статические методы типа A из экземпляров Type, которые имеют место typeof(A), и вы не можете определить переменную, которая может содержать только typeof(A) или производные типы.
(Некоторые конкретные шаблоны, для которых используются метаклассы Delphi, могут быть выполнены с использованием дженериков:
public class A { }
public class ListOfA<T> where T: A { }
В этом случае T - это "тип A" или какой-либо производный класс A использовался для построения класса.)