• [摘要]:
    传值参数(值传递 )方法中的[参数]会为传进来的 [变量] 创建一个副本,而在引用传递中,不会创建一个副本,方法中的 [参数] 是直接指向 [变量] 。
    在方法中,如果使用new操作符生成了一个新对象。引用传递的结果是对方法之外的 [变量] 产生影响,将[变量]指向更改为新对象。但值传递的结果是不会对方法之外的 [变量] 的数据产生影响。

一、刘铁猛《C#语言入门详解》全集-P18节,方法(Method) 的值传递 和 ref引用传递 背后的内存机理的理解。

C#学习笔记 - 方法参数

  • 1、值传递 -> 传入一个引用类型参数
    C#学习笔记 - 方法参数
  • 2、引用传递 -> 传入一个引用类型参数
    C#学习笔记 - 方法参数
  • 3、理解1+2 的区别:
    传值参数(值传递 )方法中的[参数]会为传进来的 [变量] 创建一个副本,而在引用传递中,不会创建一个副本,方法中的 [参数] 是直接指向 [变量] 。
    在方法中,如果使用new操作符生成了一个新对象。引用传递的结果是对方法之外的 [变量] 产生影响,将[变量]指向更改为新对象。但值传递的结果是不会对方法之外的 [变量] 的数据产生影响。

二、各种参数的使用示例

  • 1、值传递-情况1:
    C#学习笔记 - 方法参数

  • 2、值传递-情况2:
    传值函数(值传递一个对象实例),在内存中创建了实际参数的副本,怎么理解这句话?下图中,赋值前,方法中的[参数]创建了一个实际[变量]的副本。如如果你在方法中,对参数 使用操作符new 创建了一个新对象,并对这个新对象做出一些更改,那么这个new操作不会影响 方法之外的 [变量]所指的对象数据。这就是创建了副本的意义。
    下面这种传值方式,在工作中,很少见。
    C#学习笔记 - 方法参数
    下图中,赋值后,通过传进来的[参数]修改对象的成员状态,在方法结束后,再通过[变量]访问对象,该对象成员状态已经被上面的方法修改过了。
    C#学习笔记 - 方法参数
    C#学习笔记 - 方法参数

  • 3、引用传递-情况1:
    C#学习笔记 - 方法参数

  • 4、引用类型-情况2:
    4.1、常用情形:
    C#学习笔记 - 方法参数
    C#学习笔记 - 方法参数
    4.2、不常用情形:
    C#学习笔记 - 方法参数

  • 5、输出参数-情况1:
    C#学习笔记 - 方法参数
    5.1、out-传入值类型示例:
    double.TryParse()方法的实现,同样的,需要知道的是,在转换类型失败,double.TryParse()也会将传入的参数值更改成0。
    C#学习笔记 - 方法参数

  • 6、输出参数-情况2:
    C#学习笔记 - 方法参数

C#学习笔记 - 方法参数
C#学习笔记 - 方法参数

  • 7、数组参数:
    C#学习笔记 - 方法参数
    示例1:不用params关键字修饰
    C#学习笔记 - 方法参数
    示例2:用params关键字修饰,使用方便、简洁。
    C#学习笔记 - 方法参数
    示例3:使用params的其他方法
    C#学习笔记 - 方法参数

三、参数使用场景总结

C#学习笔记 - 方法参数

相关文章: