我可以在C#中提供默认参数吗?
在C:
void fun(int i = 1)
{
printf("%d", i);
}
Run Code Online (Sandbox Code Playgroud)
我们可以给参数一个默认值吗?在C#中有可能吗?如果是这样,我们可以避免重载功能吗?
向现有函数添加可选参数始终是一种不好的做法.如果您正在处理一个必须引用具有函数的类并且我们使用可选值更改参数的项目,则可能会抛出一个运行时异常,即找不到该方法.
这是因为我们将考虑如果我们添加一个额外的可选值,如果在许多地方使用该函数,则不需要更改代码.
function Add(int a, int b);
Run Code Online (Sandbox Code Playgroud)
这将使用这种方式调用:
Add(10, 10);
Run Code Online (Sandbox Code Playgroud)
但是如果我们添加这样的可选参数,
function Add(int a, int b, int c = 0);
Run Code Online (Sandbox Code Playgroud)
然后编译器期望
Add(10, 10, 0);
Run Code Online (Sandbox Code Playgroud)
实际上我们这样调用Add(10, 10)
并且该函数在该类中不可用并导致运行时异常.
这种情况发生在将一个新参数添加到由很多地方调用的函数时,我不确定每次都会发生这种情况.但我建议你重载这个功能.
我们总是需要重载具有可选参数的方法.此外,如果您正在使用具有多个可选参数的函数,则最好使用参数名称传递该值.
function Add(int a, int b, int c = 0);
Run Code Online (Sandbox Code Playgroud)
使用以下方式调用此函数总是好的.
Add(10, 20, c:30);
Run Code Online (Sandbox Code Playgroud)
Don*_*nut 37
是.请参阅命名参数和可选参数.请注意,默认值必须是常量,所以这没关系:
public string Foo(string myParam = "default value") // constant, OK
{
}
Run Code Online (Sandbox Code Playgroud)
但这不是:
public void Bar(string myParam = Foo()) // not a constant, not OK
{
}
Run Code Online (Sandbox Code Playgroud)
Fre*_*els 27
它只能从C#4.0开始
但是,当您使用4.0之前的C#版本时,可以使用重载方法解决此问题:
public void Func( int i, int j )
{
Console.WriteLine (String.Format ("i = {0}, j = {1}", i, j));
}
public void Func( int i )
{
Func (i, 4);
}
public void Func ()
{
Func (5);
}
Run Code Online (Sandbox Code Playgroud)
(或者,您可以升级到C#4.0 offcourse).
归档时间: |
|
查看次数: |
122221 次 |
最近记录: |