C# 我可以给C参数一个默认值吗? 在C++中,我们可以做下面的类似C+++< /p> public void myMethod(int i, MyClass obj, int value=100){ }

C# 我可以给C参数一个默认值吗? 在C++中,我们可以做下面的类似C+++< /p> public void myMethod(int i, MyClass obj, int value=100){ },c#,C#,另一个问题是MyClass是引用类型,如果前面没有ref,它会将MyClass的副本传递到方法中,但不会传递到引用中 谢谢,您可以在C#4.0中为可选参数执行此操作而不是在C#中,直到C#3(当前版本)。在C#4中,可以使用默认值 关于MyClass和ref的问题,参数是按值传递的。对于引用类型,可以说变量(或参数)的“值”是对实例的引用,因此如果修改MyClass实例上的属性,则修改调用方引用的同一实例 Jon Skeet在这方面写了一篇很好的文章:“你可以,但只能用c#4.0。请参见其他人正

另一个问题是MyClass是引用类型,如果前面没有
ref
,它会将MyClass的副本传递到方法中,但不会传递到引用中

谢谢,

您可以在C#4.0中为可选参数执行此操作

而不是在C#中,直到C#3(当前版本)。在C#4中,可以使用默认值

关于MyClass和
ref
的问题,参数是按值传递的。对于引用类型,可以说变量(或参数)的“值”是对实例的引用,因此如果修改
MyClass
实例上的属性,则修改调用方引用的同一实例


Jon Skeet在这方面写了一篇很好的文章:“

你可以,但只能用c#4.0。请参见

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

,第13章了解更多详细信息


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

在C#3及更早版本中,基本上实现这一精确行为的标准方法是重载所讨论的方法:

public void myMethod(int i, MyClass obj, int value=100){
    // do whatever
}

public void myMethod(int i, MyClass obj) {
    myMethod(i, obj, 100);
}
如果
MyClass
是引用类型,则
obj
将是对
MyClass
对象的引用。添加
ref
关键字将使
obj
成为引用传递的引用(仍然)。换句话说,你可以做:

obj = new MyClass();

…您将修改传递给
myMethod
的引用。否则(如果没有
ref
),您只能修改本地引用;而原始引用,无论传递给
myMethod
,都将保持不变。

您是否尝试过测试它,以查看它是否使用默认值编译?传递类总是传递引用当C#4可用时?@5YrsLaterDBA:VS2010的候选发行版现在面向MSDN订户,今天晚些时候面向其他订户。我相信实际发布时间可能在4月份。