并且假设对于类方法,默认情况下,通过值传递对象输入参数,除非使用ref关键字?
out关键字怎么样?这是否仍然意味着通过引用传递?
解决方法
If you have class and a constructor which takes in an object as a input param – is that object passed by reference or is it passed by value?
所有参数都通过C#中的值传递,除非参数被标记为out或ref.
这是一个巨大的混乱来源.我会更明确地说明事情.
除非参数标有out或ref,否则所有参数都将复制其值.对于值类型,这意味着要传递的值的副本.对于参考类型,这意味着引用的副本.对于最后一点,引用类型的值是引用.
And is it true to assume that for class methods,object input parameters are passed by value by default unless the
ref
keyword is used?
同样,所有参数都通过C#中的值传递,除非参数被标记为out或ref.对于标有ref的参数,对参数的引用传递给该方法,现在您可以将该参数视为别名.因此,当你说
void M(ref int m) { m = 10; } int n = 123; M(ref n);
你可以认为M中的m是n的别名.那是m和n只是同一个存储位置的两个不同的名字.
这是非常不同的
string s = "Hello,world!"; string t = s;
在这种情况下,对于相同的存储位置,s和t不是通道.这些是两个不同的变量,即引用同一个对象.
What about the `out keyword? Does this still mean that it is passed by reference?
ref和out之间的唯一区别是ref需要在传递之前初始化变量.