Jes*_*ond 1 c# parameters function
我的问题与C#函数参数有关.我习惯于C++,默认情况下参数是值,除非你明确地将它们指定为引用.那么,在C#中,如何使函数参数按值而不是按引用传递?实际上,我只想知道如何传递变量,并且在调用函数后没有修改该变量.
例如:
void foo(Widget w)
{
w.X = 3;//where w wouldn't really be modified here
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*off 10
没人提到struct
s是按值传递的:
struct Foo
{
public int X;
public override string ToString()
{
return "Foo.X == " + X.ToString();
}
}
class Program
{
static void ModifyFoo(Foo foo)
{
foo.X = 5;
System.Console.WriteLine(foo);
}
static void Main()
{
Foo foo = new Foo();
foo.X = 123;
ModifyFoo(foo);
System.Console.WriteLine(foo);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ mono ./a.exe Foo.X == 5 Foo.X == 123
如果您使用struct
s作为类型,那么您只能在明确使用ref
或out
在方法中修改实例...但显然这仅在您控制所涉及的类型时才有效.
归档时间: |
|
查看次数: |
402 次 |
最近记录: |