【C#】函数/方法参数基础

1. 值参数

通过将实参的值复制到形参的方式把数据传递给方法,在栈中为形参分配空间。

  • 值类型参数会被复制,产生一个独立的数据项;
  • 引用类型会复制引用,实参和形参都引用堆中同一个对象;
  • 引用类型值参数,如果在方法内创建一个新对象并赋值给形参,将切断形参与实参的联系,在方法结束后,新对象也将不存在,实参仍指向原始对象。

2. 引用参数(ref)

方法的声明和调用中都要用ref修饰,实参必须是变量,传参前必须被赋值。

不会新分配内存,形参实参都指向相同的内存,方法内对参数的改变在方法外依然有效。

  • 引用类型引用参数,修改会同时影响实参和形参,如果在方法内创建一个新对象并赋值给形参,形参和实参的引用都指向新对象,在方法结束后,新对象依然存在,并且是实参所引用的值,实参指向方法内创建的新对象。

3. 输出参数(out)

方法的声明和调用中都要用out修饰,实参必须是变量,传参前可以不赋值,方法内必须进行赋值。

不会新分配内存,形参实参都指向相同的内存,方法内对参数的改变在方法外依然有效。(与ref类似)

4. 数组参数(params)

在声明中数据类型前使用params修饰,可以有0个或多个实参对应一个特殊的形参(看起来像是一个数组)。

  • 方法的参数列表中只能有一个参数数组,且必须在列表的最后一个;
  • 参数数组的所有参数必须是相同类型;
  • 方法调用时不需要params修饰符,使用逗号分隔参数;
  • 参数数组如果是引用参数或输出参数,声明和调用都需要加修饰符;
  • 如果数组参数是值类型,形参改变不会影响实参;
  • 如果数组参数是引用类型,形参改变会影响实参。

5. 命名参数

普通情况用到的参数是未知参数,实参的位置必须与相应的形参位置对应。

命名参数,只要显示指定参数的名字,可以以任意顺序在方法中调用实参。

6. 可选参数

可选参数是在方法声明中提供默认值,在调用方法的时候可以赋值,也可以忽略。

  • 只要值类型的默认值在编译的时候确定,就可以作为可选参数;
  • 只有引用类型的默认值为null的时候,才能作为可选参数;
  • 所有的可选参数必须在必选参数之后;
  • 如果有params数组参数,必须在可选参数之后;
  • 多个可选参数在省略赋值时,必须从后往前省略。
发布了104 篇原创文章 · 获赞 74 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_39108767/article/details/105547043