一位朋友询问tppeof、GetType()、is、as的问题,在实验的时候顺手就用泛型写的例子。在看Jit后的反汇编时发现了一个问题,clr对泛型参数有些特殊处理。上网查了一下没有找到介绍泛型参数存储的文章因此动手做了一番实验,有了些浅显的理解在此记录下来望看到此文的高手能给予全面的解释。
以前用泛型的时候没想过clr是如何处理泛型参数的,今天查阅了下<<Expert .NET 2.0 IL Assembler>>里面讲解了一个叫做GenericParam Metadata Table的数据结构,不过没能解决我的疑惑。先来看段代码:
class C<T, U, V> where T: class
{
public void Test_Class(V v)
{
Debugger.Break();
T t = v as T;
}
public void Test_Method<X, Y>(X x, Y y)
{
Debugger.Break();
Type type1 = typeof(X);
Type type2 = typeof(Y);
}
}
class Test
{
static void Main()
{
C<Type, string, object> c = new C<Type, string, object>();
string s = "ok