我可以给C#参数一个默认值吗?

5Yr*_*DBA 4 c#

在C#中我们可以像C++一样执行以下操作吗?

public void myMethod(int i, MyClass obj, int value=100){

}
Run Code Online (Sandbox Code Playgroud)

另一个问题是MyClass是一个引用类型,如果ref之前没有它,它会将MyClass的副本传递给方法而不是引用?

谢谢,

Fre*_*örk 10

不在C#到C#3(这是当前版本).在C#4中,您可以使用默认值的可选参数.

关于MyClass的问题ref,参数按值传递.对于引用类型,您可以说变量(或参数)的"值"是对实例的引用,因此如果您修改MyClass实例上的属性,则修改与调用者具有引用的相同实例.

Jon Skeet写了一篇关于这个主题的好文章:" C#中的参数传递 "


Jon*_*eet 5

其他人已经正确回答了可选参数部分:您可以为C#4中的参数指定默认值.(有各种限制,例如必须参数必须在可选参数之前,默认值必须是编译时常量.)

<gratuitous plug>有关详细信息,请参阅深度中的C#,第2版,第13章</gratuitous plug>

对于"参数传递"方面 - 默认情况下所有参数都按值传递,但在引用类型的情况下,参数是引用,而不是对象.调用者可以看到对象的更改,但如果您更改参数本身以引用其他对象,则调用者将无法看到该更改.(它不会更改调用者变量的值.)有关详细信息,请参阅有关参数传递的文章.