在delphi中,我可以像一样声明一个类型的类
type
TFooClass = class of TFoo;
TFoo=class
end;
这个声明的C#等价物是什么?
在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#中做任何类似的事情;不能从恰好包含typeof(A)
的Type
实例中调用类型A的静态方法,也不能定义只能包含typeof(A)
或派生类型的变量。
(Delphi元类类型用于的一些特定模式可以使用泛型来实现:
public class A { }
public class ListOfA<T> where T: A { }
在这种情况下,T是"A的类型"或任何用于构造类的派生类。)