没有合适的资源?快使用搜索试试~ 我知道了~
泛型内部机制 泛型拥有类型参数,通过类型参数可以提供”参数化”的类型,事实上,泛型类型的”类型参数”变成了泛型类型的元数据,”运行时”在需要的时候会利用他们构造恰当的类型,通过这些类型,我们有可以实例化不同类型的对象。也是说,未绑定泛型类型是以构造泛型类型的蓝图,已构造泛型类型又是实际对象的蓝图。 分析泛型IL代码 下面看一个例子,在这个例子中定义了一个用于比较的泛型类和一个比较int的非泛型类: namespace GenericTest { class CompareUtil<T>where T:IComparable { public T
资源详情
资源评论
资源推荐
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
weixin_38623442
- 粉丝: 4
- 资源: 957
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0