Using a reference value as parameter, with or without “ref”?
本问题已经有最佳答案,请猛点这里访问。
我遇到了两个解决方案(两个都有效):
1 | public List<Label> foo1(ref ISomeInterface[] all) |
或
1 | public List<Label> foo2(ISomeInterface[] all) |
有没有不同之处,我选哪一个重要?接口是一个引用值,无论如何都会给出参数作为引用,"ref"也会得到引用…我想我可以去掉"ref"…我想知道为什么编译器不给我一个错误…
Is there a diffrerence?
是的,有。C中的所有内容都按值传递。当通过
一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public static void Main(string[] args) { ISomeInterface[] somes = new[] { new SomeConcreteType() } Foo(somes); Console.WriteLine(somes.Length) // Will print 1 Foo(ref somes); Console.WriteLine(somes.Length) // Will print 0 } public List<Label> Foo(ref ISomeInterface[] all) { all = new ISomeInterface[0]; } public List<Label> Foo(ISomeInterface[] all) { all = new ISomeInterface[0]; } |
在第一种情况下,您将替换"global"(out of method)参数
1 2 3 4 5 6 7 8 9 |
这取决于您要对数组做什么。如果要修改foo1方法中的值并在foo1方法之外使用这些修改,则可以使用
如果您只想使用返回的