当前位置: 首页 > news >正文

青岛网站建设seo登录我的博客

青岛网站建设seo,登录我的博客,机械加工网厂,博客做单页网站说到泛型方法#xff0c;这个是.net 2.0的时候引入的一个重要功能#xff0c;c#2.0也对此作了非常好的支持#xff0c;可以不需要显试的声明泛型类型#xff0c;让编译器自动推断#xff0c;例如#xff1a; 1 void FT(T value){} 2 //... 3 int i 0; 4 F(i); 此…  说到泛型方法这个是.net 2.0的时候引入的一个重要功能c#2.0也对此作了非常好的支持可以不需要显试的声明泛型类型让编译器自动推断例如 1 void FT(T value){} 2 //... 3 int i 0; 4 F(i); 此时编译器可以自动推导出这里的T就是int这极大的方便了我们写代码的效率。   说到扩展方法这个是.net 3.5的时候引入的另一个重要功能c#3.0也在linq中大量的应用这个功能当扩展方法是扩展一个泛型的类型时显然也不需要我们指定具体的泛型类型编译器会为我们自动推断例如 1 static void FT(this ListT list){} 2 //... 3 Listint list new Listint(); 4 list.F();   最后说到协变和逆变也就是c#中的in/out这个是.net 4.0的时候引入的一个重要的功能例如 1 Funcstring foo () Foo; 2 Funcobject bar foo;   然后我们将泛型方法推断和协变和逆变放在一起 1 public static void Foo(this Actionstring action){} 2 //... 3 Actionobject action o {}; 4 action.Foo();   看起来很不错不过要是遇到些复杂点的会怎么样 1 public static void Foo(this IEnumerableIEnumerableobject that) {} 2 //... 3 ListListstring bar new ListListstring(); 4 bar.Foo();   看到这里相信所有都为c#的in/out拍手叫好不过别急除了outout我们还可以玩令人抓狂的inin 1 public static void Foo(this ActionActionobject that) {} 2 //... 3 ActionActionstring action a a(O_O); 4 action.Foo();   看到这里有没有发现什么问题如果你没觉得有什么不舒服的感觉说明你一定是懂协变和逆变的高手或是完全不懂的初学者。   先想下定义Actionin TT 是in的也就是Actionobject里面的object可以被string这样更具体的类型替代而这里ActionActionstring里面的Actionstring被Actionobject替代了怎么看都感觉有些怪异不过在细细品味一下就可以发现这个结果是完全合理的。string虽然比object更具体不过一个接受string的方法可比一个接受object的方法更抽象所以可以简单的得到一个结论ininout   文章要是到这里结束估计很多人就认为本文是对c#的无比赞美了吧不过重点是这里别忘了多个泛型参数可以玩出很多猥琐的东西例如双/多泛型锁定随便起的名字 1 public static void FooT(this ActionT, T that) {} 2 //... 3 Actionstring, object action (s, o) {}; 4 action.Foo();   c#编译器对扩展方法支持的确是有一手这么变态的T也可以被推断出是object不得不佩服一把再来看看out的情况别忘了前面的结论ininout 1 public static void FooT(this ActionActionT, ActionT that) {} 2 //... 3 ActionActionstring, object action (s, o) {}; 4 action.Foo();   c#编译器依然表现出专业的结果正确的推断出了T应当是string不过泛型方法的类型推断却完全是另外一番风景 1 public void FooT(ActionT, T that) {} 2 //... 3 Actionstring, object action (s, o) {}; 4 Foo(action); // failed. 5 Fooobject(action); // failed. 6 Foo((Actionobject, object)action); // succeeded.   看到这个结果是不是想大骂c#编译器这也太山寨了吧。   别急我们还可以玩得更加浮云 1 public static FooT(this ActionActionT, ActionT that) {} 2 // ... 3 ActionActionListstring, ActionArrayList bar null; 4 bar.Foo(); // failed. 5 bar.FooIEnumerable(); // succeeded.   或者这个 public static FooT(this ActionT, T that) {} // ... ActionIEnumerablechar, IComparablestring action null; action.Foo(); // failed. action.Foostring(); // succeeded.   c#编译器显然不想瞎猜T的类型是什么要求必须编程者明确指出T的具体类型。 转载于:https://www.cnblogs.com/vwxyzh/p/3704220.html
http://www.zqtcl.cn/news/929247/

相关文章:

  • 免费企业查询网站网站建设有关的职位
  • 有哪些网站是可以做会计题目的广告网站建设设计
  • 房地产项目网站建设wordpress codecolorer
  • 网站服务器机房html5写的网站有什么好处
  • 三网合一网站源码下载宣传片拍摄手法及技巧
  • 重庆有网站公司公司做网站能抵扣进项税吗
  • 深圳南山网站开发卖东西的网站怎么建设
  • 网站开发教程全集网站内外链建设
  • 购物网站排名数商云科技
  • 哪种网站百度网盘登录入口官网
  • 做淘宝网站多少钱wordpress 七牛云存储
  • 做淘宝网站多少钱江苏省建设厅网站建筑电工证
  • 深圳网站建设 贴吧广州档案馆建设网站
  • 专注网站建设电商商城网站建设
  • 黄石专业网站建设推广一起做网店 网站打不开
  • 网站session 验证江西星子网
  • 成都高校网站建设服务公司小树建站平台
  • 宁波网站建设 慕枫科技顺德网站设计制作
  • 企业网站如何宣传wordpress 链接修改插件
  • 站长工具官网查询视频网站建设工具
  • 建设彩票网站制作网站服务器
  • 购物网站建设网站怎么购买国外的域名
  • 在线网站排名工具跨境电商卖什么产品最赚钱
  • 电商网页设计网站什么是网络营销产生的现实基础
  • 网站开发需要注意的阿里云做网站可以免备案吗
  • 网站开发后端菜鸟教程本地安装wordpress nginx
  • 网站做端口映射域名怎么做网站
  • 港口建设征收 申报网站网站内容建设与管理
  • 长沙企业网站建设较好的公司个人社保缴费比例
  • 网站备案信息页面惠安网站建设报价