Наиболее близким к C # является тип Type
, который содержит метаданные о типе.
public class A { }
public static int Main(string[] args)
{
Type b = typeof(A);
}
Это не точно то же самое. В Delphi «тип другого типа» сам по себе является типом, который можно назначить переменной. В C # «тип другого типа» - это экземпляр 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;
Вы не можете делать ничего подобного в C #; вы не можете вызывать статические методы типа A из экземпляров Type
, которые содержат typeof(A)
, и вы не можете определить переменную, которая может только содержать typeof(A)
или производные типы.
(Некоторые конкретные шаблоны, для которых используются типы метаклассов Delphi, могут быть выполнены с использованием обобщенных шаблонов:
public class A { }
public class ListOfA<T> where T: A { }
В этом случае T - это «тип A» или любой другой производный класс A, использованный для его создания.)