我可以给C#函数中的参数或可选参数的默认值?

我可以给C#中的默认参数?

在C:

void fun(int i = 1) { printf("%d", i); } 

我们可以给参数一个默认值吗? 在C#中可能吗? 如果是的话,我们可以避免重载function?

将可选参数添加到现有函数总是一个不错的做法。 如果您正在处理一个不得不引用具有某个函数的类的项目,并且使用一个可选的值更改了一个参数,则可能会抛出一个运行时exception,以至于找不到该方法。

这是因为我们会考虑如果我们添加一个额外的可选值,如果函数在很多地方使用,则不需要更改代码。

 function Add(int a, int b); 

这将被称为使用这种方式:

 Add(10, 10); 

但是如果我们添加一个像这样的可选参数,

 function Add(int a, int b, int c = 0); 

那么编译器期望

 Add(10, 10, 0); 

实际上,我们正在调用像这样的Add(10, 10) ,这个函数在这个类中将不可用,并导致运行时exception。

这种情况发生在为一个被很多地方调用的函数添加一个新参数的时候,我不确定每次都会发生这种情况。 但是我build议你重载这个函数。

总是需要重载具有可选参数的方法。 另外,如果您正在处理具有多个可选参数的函数,则最好使用参数的名称传递值。

 function Add(int a, int b, int c = 0); 

用下面的方法调用这个函数总是很好的。

 Add(10, 20, c:30); 

这正是你在C#中所做的,但是这个特性是在.NET 4.0中首次添加的

它只能从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); } 

(或者,您可以升级到C#4.0 offcourse)。

是。 请参阅命名参数和可选参数 。 请注意,默认值需要是一个常数,所以这是OK的:

 public string Foo(string myParam = "default value") // constant, OK { } 

但是这不是:

 public void Bar(string myParam = Foo()) // not a constant, not OK { } 

是的,但是你需要使用.NET 3.5和C#4.0来获得这个function。

此MSDN页面有更多的信息。

此function可从C#4.0获得 – 它是在Visual Studio 2010中引入的。您可以在.NET 3.5的项目中使用它。 因此,不需要将.NET 3.5中的旧项目升级到.NET 4.0。

你必须使用Visual Studio 2010,但要记住它应该编译成默认的语言版本(在项目Properties-> Buid-> Advanced …中设置)

此MSDN页面包含有关VS 2010中可选参数的更多信息。

这是C#4.0的一个特性,但是如果没有在该版本之前使用函数超载的话是不可能的。