在 C# 中 - 可选参数 - 为其他未提供的参数创建一个补全。
所以如果我写:
void Go(int a, bool isFalse = true)
并打电话Go(a)
它实际上为Go(a, true)
.
命名参数怎么样?切换顺序是如何在幕后工作的?
例如 :
Go(isFalse:true, a:1) //order has been switched.
在 C# 中 - 可选参数 - 为其他未提供的参数创建一个补全。
所以如果我写:
void Go(int a, bool isFalse = true)
并打电话Go(a)
它实际上为Go(a, true)
.
命名参数怎么样?切换顺序是如何在幕后工作的?
例如 :
Go(isFalse:true, a:1) //order has been switched.
例如,如果你有这样的东西
void Go ( int a , bool isFalse, bool isEmpty)
在您调用后Go(1,isEmpty : true, isFalse : false)
,它将生成这样的函数调用
Go ( 1, false, true)
Go(a)
将编译为Go(a, true)
. 这意味着如果在引用库中更改参数的默认值,则需要重新编译调用代码。
根据经验,命名(和默认)参数只是一个编译器技巧。运行时级别的调用规则与之前的版本相同。
因此,调用Go(isFalse = true, a = 1)
实际上将编译为Go(1, true)
.
当你调用Go(a)
它时调用Go(a, true)
not Go(a, false)
。例如;
using System;
namespace Programs
{
public class Program
{
public static void Main(string[] args)
{
Go(5);
}
static void Go(int a, bool isFalse = true)
{
Console.WriteLine("Int is {0}, Boolean is {1}", a, isFalse);
}
}
}
输出是:
Int 为 5,布尔值为 True
如果在调用时未使用它isFalse
,则将其设置为。true
但是,如果您关心订单,则必须使用您在方法中描述的订单。例如;
如果您有类似的方法
SomeMethod(bool isFalse, bool isFull, bool isStacked)
当你调用这个方法时
SomeMethod(true, false, true)
你的方法就像
isFalse = true
,isFull = false
和isStacked = true
因为订单。但有时当你的方法有很多参数可以混合顺序时,你可以使用带有的命名参数C# 4.0
。哪个基于相同的方法,你可以这样;
SomeMethod(isStacked: true, isFull: false, isFalse = true)
等于调用
SomeMethod(true, false, true)