class Program
{
static void Main(string[] args)
{
Type t = typeof(A<,>);
Console.WriteLine(typeof(A<,>)); // prints A'2[T1,T2]
}
}
class A<T1,T2>
{
}
Run Code Online (Sandbox Code Playgroud)
据我所知,泛型类型A<T1, T2>不是实际类型,而是实际类型的蓝图/模板,所以为什么typeof接受它作为参数(因为据我所知,typeof接受作为参数实际类型)?
谢谢
在反射中,未构造的泛型类型与实例类型C<>合并。 C<T>
这或许并不纯粹是理论上的。我认为这些是非常不同的实体。我认为一个是符号“带有一个类型参数的 C”,另一个是编译时类型 C<T>。在代码中,C<>和C<T>不是彼此的同义词;如果 T 在范围内,则可以创建后一种类型的字段,但不能创建前一种类型的字段。
当您请求非构造类型时,反射库会为您提供实例类型的类型,但这并不全是坏事。您将如何处理非构造类型?你真的无能为力。但对于实例类型,您可以在这里说“用 int 代替 T”。
C<T>当您请求时获取的真正好处typeof(C<>)是,这总是为您提供非构造类型。比较:
class C<T>
{
public static Type CT() { return typeof(C<T>); }
public static Type JustC() { return typeof(C<>); }
}
Run Code Online (Sandbox Code Playgroud)
当您致电 CT 时,您会拨打什么电话?没有C<T>可以调用 CT 的类型。你可以打电话,C<int>.CT这种情况下你会回来C<int>,而不是C<T>。获得用 T 构造的类型的唯一方法C<>是请求typeof(C<>).
那有意义吗?
我还没有讨论反射(我对它是什么有一个模糊的概念)
反射只是一个代码库,它允许您在代码本身中获取有关代码的信息。“typeof”为您提供一个 Type 对象,然后您可以“反映”该对象以查找有关类型的信息。
我不确定我是否理解“即使 T 不在范围内”的意思
我说的方式令人困惑。我已经重新表述了。
| 归档时间: |
|
| 查看次数: |
433 次 |
| 最近记录: |