C#中命名参数和可选参数(命名参数调用)

调用方法时,变量名不需要添加到调用中。比如有如下的方法用于移动矩形并在移动之后设置他的宽和高:

public void MoveAndResize(int x,int y,int width,int height)

有两种调用方式:
1. MoveAndResize(10,20,30,40); 

2. MoveAndResize(x: 10,y: 20,width: 30,height: 40);

第一种方式是常用的也非常简单,但是从调用上看不出来所用参数的含义。
第二种方式采用了命名参数,也就是:参数名 : value   的形式,这种方式可以直观的体现初始化什么参数,还可以更改调用顺序,比如:

MoveAndResize(y: 20,x: 10,width: 30,height: 40);

但是第二种方式用起来比较繁琐,实际在编辑器中也有代码提示等相关的功能,比如鼠标放在方法名上,原方法的相关的定义都出现了。
不过命名参数的实际用处在于他和可选参数的结合使用。可选参数:顾名思义,在方法调用的时候可以不用给该参数赋值。比如下面的方法有一个参数:isTest,当 isTest 为 true 时,进行某些操作:

public void Test(int a , bool isTest = false)

在调用的时候当我不需要与第二个参数相关功能的时候可以不用赋值:

Test(10);

可选参数使用:必须要为该参数设置默认值,而且可选参数必须放在函数参数列表的最后。
命名参数与可选参数的结合使用,比如现在有一个方法:

public void TestM(int a ,int b = 1 , int c = 2, bool d = false , string e = "test")

当我调用的时候,如果只想用到其中的 a,d 参数怎么办?,可以这样调用
1. 将 d 前面的参数全部初始化,其中可选参数用默认值初始化:

    TestM(2,1,2,true);

2. 使用命名参数:

    TestM(2,d: true);

注意上面的情况,当有多个可选参数时,命名参数的作用凸显,可以传递任何可选参数而不关心到底有几个可选参数和他们的顺序。

猜你喜欢

转载自blog.csdn.net/lizhenxiqnmlgb/article/details/82789134
今日推荐