第九章 参数

2013-02-27

9.3 以传引用的方式向方法传递参数


默认情况下,CLR假定所有方法参数都是传值的。当传递引用类型的对象时,也默认是传值的,只不过这个值是引用(指针)本身。

CLR允许以传引用的方式传递参数。在C#中,用关键字out或ref来告诉编译器。编译器将传递参数的地址,而不是传递参数本身。

从CLR角度看,out和ref完全一致。但从C#编译器看,有区别:

(1)       out,表明不指望调用者在调用方法之前初始化对象

(2)       ref,表明必须在调用着在调用方法之前初始化对象

9.4 向方法传递可变数量的参数


用关键字params表明传递的是可变数量的参数

int Add(params int[] values) { return 0;}

注意:只有最后一个参数可以用params参数

9.5 参数和返回类型指导原则


为了使方法有最大的灵活性,最大的应用范围:

(1)       声明方法参数类型是,尽量指定最弱的类型,最好是接口而不是基类。

(2)       相反,一般最好将方法的返回类型声明为最强的类型(以免受限于特定的类型)。

《CLR via C#》读书笔记 之 参数相关推荐

  1. .net框架读书笔记---引用参数(ref/out)

    接上一篇.net框架读书笔记---方法(类型造器) 默认情况下,CLR假设所有的方法参数都是按值传递参数的.当参数为引用类型的对象时,参数的传递是通过传递对象的引用(或)指针来完成的.这意味着方法可以 ...

  2. 《CLR via C#》读书笔记---09 参数

    核心归纳脑图 避免无意义的副本 如果提取的一个方法,目的是"传入一个值,然后加工计算后返回",这是一个常见的行为: 传入的值如果是"值类型",那是创建的副本,因 ...

  3. CLR via C# 读书笔记 1-2 创建线程的成本

    在clr中创建线程的代价还是比较高的 ,他需要两个部分 内存: 线程核心对象, 存放描述线程的一些内容和上下文 . (内存消耗:700B-2500B) 线程环境,存放例如异常处理链之类. (内存消耗 ...

  4. CLR Via CSharp读书笔记(14):字符、字符串和文本处理

    数字类型与字符相互转换的三种技术: Casting: 最优效率,因为编译器产生IL指令来执行转换.C#允许开发者指明checked或unchecked代码以执行转换. 使用System.Convert ...

  5. CLR Via CSharp读书笔记(26) - 计算限制的异步操作

    执行上下文: 执行上下文包括安全设置(压缩栈.Thread的Principal属性和Windows身份), 宿主设置(System.Threading.HostExecutionContextMana ...

  6. CLR Via CSharp读书笔记(29) - 混合线程同步构造

    {TODO:} 转载于:https://www.cnblogs.com/thlzhf/p/3494561.html

  7. CLR Via CSharp读书笔记(7):常量和字段

    {TODO:} 转载于:https://www.cnblogs.com/thlzhf/archive/2012/12/06/2805424.html

  8. CLR via C# 读书笔记 5-5 预留大内存

    在进行需要很大内存空间的计算时,非常容易发生OutOfMemoryException System.Runtime.MemoryFailPoint提供了在运行需要大内存的计算前进行内存检查的功能 在调 ...

  9. .net框架读书笔记---虚方法

    接上一篇.net框架读书笔记---引用参数(ref/out), 一.虚方法调用机理 代码 namespace VirtualFunction { class Program { static void ...

最新文章

  1. 【Qt】Qt再学习(八):Media Player(Qt实现多媒体播放器)
  2. 华为任正非:5G只是将来支撑人工智能存在的工具
  3. python 操作word文件案例
  4. java socket ip_JAVA 网络编程 TCP/IP、Socket 和协议设计
  5. osgi和spring区别_OSGI和Spring动态模块–简单的Hello World
  6. 第三十三期:对于人工智能的恐惧及其5个解决方法
  7. 腾讯视频怎么开启运营商网络自动播放
  8. 程序员大部分时间都在“熟悉系统”
  9. C与C++关于*与的传参解析
  10. 最想学 Go、Python,全栈开发者紧缺!分析了 11 万条程序员数据后有了这些发现...
  11. Mipmap drawables图标
  12. 学习java需要用到哪些软件?
  13. VGA常用分辨率及计算方法
  14. 运维必须掌握的27道Linux面试题
  15. linux bash 自动补全,bash中的自动补全机制
  16. 计算机导论知识点总结(下)
  17. 镜头调制传递函数MTF
  18. android字体大小根据分辨率自动调整
  19. jdk的安装、卸载与简介
  20. vc项目开发:俄罗斯方块制作日志 [上]

热门文章

  1. NOIP2005普及组第3题 采药 (背包问题)
  2. 微信开发之 二维码生成类库
  3. Unity --- MeshRenderer之网格合并
  4. Oracle 11g DG主库节点2 ORA-00245: control file backup fail
  5. OI生涯回忆录(二)
  6. java实验四——找鞍点
  7. Struts 2初体验
  8. [Postgres]Postgres复制表
  9. Storm 疑难杂症。
  10. POJ 1091(数论)