C#泛型内部工作机制详细解析
作者:网络转载 发布时间:[ 2015/2/26 16:52:50 ] 推荐标签:C# 软件开发 泛型
泛型内部机制
泛型拥有类型参数,通过类型参数可以提供”参数化”的类型,事实上,泛型类型的”类型参数”变成了泛型类型的元数据,”运行时”在需要的时候会利用他们构造恰当的类型,通过这些类型,我们有可以实例化不同类型的对象。也是说,未绑定泛型类型是以构造泛型类型的蓝图,已构造泛型类型又是实际对象的蓝图。
分析泛型IL代码
下面看一个例子,在这个例子中定义了一个用于比较的泛型类和一个比较int的非泛型类:
namespace GenericTest
{
class CompareUtil<T>where T:IComparable
{
public T ItemOne{get;set;}
public T ItemTwo{get;set;}
public CompareUtil(T itemOne,T itemTwo)
{
this.ItemOne=itemOne;
this.ItemTwo=itemTwo;
}
public T GetBiggerOne()
{
if(ItemOne.CompareTo(ItemTwo)>0)
{
return ItemOne;
}
return ItemTwo;
}
}
class IntCompareUtil
{
public int ItemOne{get;set;}
public int ItemTwo{get;set;}
public IntCompareUtil(int itemOne,int itemTwo)
{
this.ItemOne=itemOne;
this.ItemTwo=itemTwo;
}
public int GetBiggerOne()
{
if(ItemOne.CompareTo(ItemTwo)>0)
{
return ItemOne;
}
return ItemTwo;
}
}
class Program
{
static void Main(string[]args)
{
CompareUtil<int>compareInt=new CompareUtil<int>(3,6);
int bigInt=compareInt.GetBiggerOne();
IntCompareUtil intCompareUtil=new IntCompareUtil(4,7);
int big=intCompareUtil.GetBiggerOne();
Console.Read();
}
}
}
首先,通过ILSpy查看一下泛型类”CompareUtil<T>”的IL代码(只列出了一部分IL代码)
.class private auto ansi beforefieldinit GenericTest.CompareUtil`1<([mscorlib]System.IComparable)T>
extends[mscorlib]System.Object
{
……
.method public hidebysig specialname rtspecialname
instance void.ctor(
!T itemOne,
!T itemTwo
)cil managed
{……}
……
//Properties
.property instance!T ItemOne()
{
.get instance!0 GenericTest.CompareUtil`1::get_ItemOne()
.set instance void GenericTest.CompareUtil`1::set_ItemOne(!0)
}
.property instance!T ItemTwo()
{
.get instance!0 GenericTest.CompareUtil`1::get_ItemTwo()
.set instance void GenericTest.CompareUtil`1::set_ItemTwo(!0)
}
}//end of class GenericTest.CompareUtil`1
大家可以查看非泛型类”IntCompareUtil”的IL代码,你会发现泛型类的IL代码跟非泛型类的IL代码基本一致,只是泛型类的IL代码中多了一些类型参数元数据。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11