• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c#泛型原理(旧)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

前言

说起泛型可能很多人刚才看到的时候肯定会说牛逼啊,厉害啊,这东西少写了不少代码,我总结了泛型的一个优点,那就是少写代码,额,专业点吧。

优点:增加代码的重复利用率,代码重用。

先不讲原理吧,来讲下思想,啥子思想呢?泛型,说到底就是写的也不知道这将来是啥子,但是已经确定好了约束范围,比如说T:class,但是不晓得是哪一个class,等我运行到的时候我传进去我就知道了呗。

说到底就是挖了一个坑,填什么我不知道啊,但是坑要先挖吧,不能等用的时候再填吧,这个不管是不是泛型都要做的事。

int,string这等种不是泛型的搭了一个固定架子,来放int,string等,等上锅的时候放入相应的int,string就按是那种架子放哪种锅就行了呗。

这个架子是什么意思呢?比如说int32就是4个字节,那么会挖好坑,然后架子就是这4个字节。

泛型和他们有啥不一样呢?他就是挖了坑不放架子,等用的时候再告诉系统放什么架子填入数据再去让cpu跑。

思想:延迟思想(性能优化的一种方式)。

我当时就想为啥他能这么干呢?

后来找到了一张图,恍然大悟,分享一下哈。

所有的c#代码来源这张图,我这么说肯定有人反对的,c#1.0就不是啊,好吧我们从2.0开始吧,相信大家都没有去用1.0的吧,泛型的出现没有这个是实现不了的。

过程是:经过编译器转换为中间语言,也就是放在dll中,然后再到clr填入数据,然后交给机器语言,这个过程我们就发现原理数据是最后填入的,那既然这样我晚点上车其实是一样的。

泛型的好处:

static void Main(string[] args)
{
	int Ivalue = 1;
	string sValue = "1";
	object oValue = 1;

	Console.WriteLine("*************非泛型***************");
	{
		show(Ivalue);
		show(sValue);
		show(oValue);
	}

	Console.WriteLine("*************泛型***************");
	{
		showint(Ivalue);
		showstring(sValue);
		showObject(oValue);
	}
	Console.Read();
}
public static void show<T>(T data)
{
	Console.WriteLine("data:{0},type:{1}", data, data.GetType());
}
public static void showint(int Idata)
{
	Console.WriteLine("data:{0},type:{1}", Idata, Idata.GetType());
}
public static void showstring(string Sdata)
{
	Console.WriteLine("data:{0},type:{1}", Sdata, Sdata.GetType());
}
public static void showObject(object Odata)
{
	Console.WriteLine("data:{0},type:{1}", Odata, Odata.GetType());
}

泛型和非泛型性能的对比,计算一亿次。个人认为泛型的最大的好处在于避免装箱拆箱。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中的Finalize,Dispose,SuppressFinalize的实现和使用介绍发布时间:2022-07-10
下一篇:
c#Applicatcontext类发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap