哪个是C#声明相当于delphi“class of”(类的类型)?

时间:2012-03-02 01:43:03

标签: c# delphi

在delphi中,我可以像这样声明一个类的类

type
  TFooClass = class of TFoo;
  TFoo=class
  end;

这个声明的C#等价物是什么?

1 个答案:

答案 0 :(得分:14)

C#中最接近的是Type类型,其中包含有关类型的元数据。

public class A { }
public static int Main(string[] args)
{
  Type b = typeof(A);
}

不完全相同。在Delphi中,“othertype类型”本身就是一种可以分配给变量的类型。在C#中,“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;

你不能在C#中做这样的事情;你不能从碰巧持有Type的{​​{1}}实例调用类型A的静态方法,也不能定义一个只能 持有typeof(A)或派生的变量类型。

(Delphi元类类型的一些特定模式可以使用泛型完成:

typeof(A)

在这种情况下,T是“A的类型”或A用于构造类的任何派生类。)