HTML5技术

你必须知道的C#.Net参数知识大盘点 - 陌城心灵捕手(5)

字号+ 作者:H5之家 来源:H5之家 2016-09-03 11:00 我要评论( )

类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。 where T:new() 类型参数必须具有无参数的公共构造函数。 当与其他约束一起使用时, new()约束必须最后指定。 where T:基类名 类型参数必

类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。

where T:new()

类型参数必须具有无参数的公共构造函数。当与其他约束一起使用时,new() 约束必须最后指定。

where T:<基类名>

类型参数必须是指定的基类或派生自指定的基类。

where T:<接口名称>

类型参数必须是指定的接口或实现指定的接口。可以指定多个接口约束。约束接口也可以是泛型的。

where T:U

为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。

 

in/out 泛型类型参数修饰符

in/out关键字均可以在泛型接口和委托中使用。
用in修饰的泛型类型参数,表示该类型参数是逆变的。
用out修饰的泛型类型参数,表示该类型参数是协变的。
关于泛型的逆变和协变需要大篇幅来讲解,且与本文的侧重点有所偏离,故不作深入探讨。

本文回顾与总结

本文先是对形参/实参、命名实参、可选参数、params数目可变参数等基础知识概念作了一翻讲解,顺便蜻蜓点水了值类型与引用类型,然后以此为铺垫,开始循序渐进、由浅入深的揭秘参数传递的神秘面纱。
参数传递才是本文的重难点,比较绕,而且拗口,理解起来需要静下心细细品味与琢磨。为了更好的理解参数传递的本质,本文也引入了IL代码和指针来加以辅助。
然而不甘寂寞的泛型类型参数也作为特邀嘉宾到场助兴,为本文增色不少。

本篇文章主要是对C#.NET里面与参数有关的知识进行盘点,但是却牵连其他知识点:
指针、内存分布、地址指向、堆栈、托管堆、泛型类型参数等...
那么问题来了:
1、引用类型加上ref、out修饰符的意义和应用场景?
2、指针和引用是什么关系,或者二者之间有何异同之处?
3、值类型的引用传递,其传的地址是堆栈地址还是托管堆地址?
4、值类型一定存储在堆栈上面吗?
5、C#的指针传递是怎样的内幕?
6、....C#的语法点滴还有哪些醉美可赏?CLR又究竟还存在多少奇幻魅惑?
这些问题还是先留给大家自己去思考一下吧,待博主后续博文继续揭晓。

对于问题或者迷惑,我们必须深入探讨,揪出其本质,才能在技术的道路上越发沉淀和累积。
您的支持是我写文的强劲动力,希望本文能够给您带来帮助和益处,非常感谢您的阅读!

看完文章,来一首好听的音乐:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 前端必须要掌握的几个CSS3的属性 - 丶小卒

    前端必须要掌握的几个CSS3的属性 - 丶小卒

    2016-07-13 16:00

  • 学习ASP.NET Core,你必须了解无处不在的依赖注入 - Artech

    学习ASP.NET Core,你必须了解无处不在的依赖注入 - Artech

    2016-07-06 10:00

  • 你可能不知道的7个CSS单位 - jerrylsxu

    你可能不知道的7个CSS单位 - jerrylsxu

    2016-05-27 12:04

  • 如果你已经这样了,那你必须要跳槽了。 - 左潇龙

    如果你已经这样了,那你必须要跳槽了。 - 左潇龙

    2016-02-01 08:06

网友点评