C#提供了比C++更灵活的参数表及传参方式。
提供[argument]:[value]的传参方式
对如下声明:
public void CreateRectangle(int x, int y, int width, int height);
有如下两种调用方式:
CreateRectangle(10,20,30,30);
CreateRectangle(x: 10, y: 20, width: 30, height: 30);
显然后者具有更好的可读性,且对传参顺序无要求,因此特性可以实现与C++不同的功能。
拥有与C++类似的默认参数写法
一个带有默认参数的声明:
public void Test(int n, int opt1 = 11, int opt2 = 22, int opt3 = 33);
因上节提及的传参方式,使的C#可以只修改位于后方的默认参数,C++则不行。如只修改opt2和opt3。
Test(1, opt3: 3, opt2: 2);
C#对于可变参数使用params配合数组关键字实现
可变参数声明如下:
public void AddThemAll(params int[] numbers);
如果需要传入不同类型,可以使用object数组(所有类的基类):
public void AddThemAll(params object[] datas);
但如若和多个参数一起使用,与C++类似的,可变参数必须为最后一个参数:
public void AddThemAll(int n, params object[] datas);
按引用传递
按引用传递是C/C++语言中常用的特性,C#也支持,但编写和使用上有些许不同。C#中要将一个参数定为引用,则需要显式的添加关键字ref,并且调用时也需要添加。它的行为和C++的引用类似。
Public static void ChangeIt( ref uint a )
{
a = 10;
}
//调用时则需要显示的写出ref关键字
uint number;
ChangeIt(ref number);