加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#构造函数,对象参数通过引用或值传递

发布时间:2020-12-15 03:57:00 所属栏目:百科 来源:网络整理
导读:如果你有类和一个构造函数,它接受一个对象作为输入参数 – 该对象是通过引用传递的还是通过值传递的? 并且假设对于类方法,默认情况下,通过值传递对象输入参数,除非使用ref关键字? out关键字怎么样?这是否仍然意味着通过引用传递? 解决方法 If you have c
如果你有类和一个构造函数,它接受一个对象作为输入参数 – 该对象是通过引用传递的还是通过值传递的?

并且假设对于类方法,默认情况下,通过值传递对象输入参数,除非使用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需要在传递之前初始化变量.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读