Который является эквивалентом объявления С# класса 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 использовался для построения класса.)