Ответ 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 использовался для построения класса.)