gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:51:19 26 4
gpt4 key购买 nike

如果您有一个类和一个将对象作为输入参数的构造函数 - 该对象是按引用传递还是按值传递?

并且假设对于类方法,除非使用 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#中所有参数都是按值传递的,除非参数被标记为outref

这是一个巨大的困惑来源。我会更明确地说明一些事情。

除非参数用outref 标记,否则所有参数的值都会被复制。对于值类型,这意味着创建了所传递值的副本。对于引用类型,这意味着创建引用的副本。对于最后一点,引用类型的值就是引用。

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# 中所有参数都是按值传递的,除非参数用 outref 标记。对于标有 ref 的参数,参数的引用将传递给方法,现在您可以将该参数视为别名。因此,当你说

void M(ref int m) { m = 10; }

int n = 123;
M(ref n);

您可以将 M 中的 m 视为 n 的别名。即 mn 只是同一存储位置的两个不同名称。

这与

非常不同
string s = "Hello, world!";
string t = s;

在这种情况下,st 不是同一存储位置的别名。这是两个不同的变量,它们恰好引用同一个对象。

What about the `out keyword? Does this still mean that it is passed by reference?

refout 之间的唯一区别是ref 要求变量在传递之前进行初始化。

关于C#构造函数,对象参数通过引用或值传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4617306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com