如果你有一个类和一个构造函数,它接受一个对象作为输入参数 - 该对象是通过引用传递还是通过值传递?
并且假设对于类方法,除非使用ref关键字,否则默认情况下会按值传递对象输入参数?
out关键字怎么样?这仍然意味着它是通过引用传递的吗?
jas*_*son 17
如果你有一个类和一个构造函数,它接受一个对象作为输入参数 - 该对象是通过引用传递还是通过值传递?
除非参数标有out或,否则所有参数都以C#中的值传递ref.
这是一个混乱的巨大来源.我会更明确地陈述一些事情.
除非参数标有out或,否则所有参数都会复制其值ref.对于值类型,这意味着要传递的值的副本.对于引用类型,这意味着引用的副本.对于最后一点,引用类型的值是引用.
并且假设对于类方法,除非使用
ref关键字,否则默认情况下会按值传递对象输入参数?
同样,除非参数用out或标记,否则所有参数都按C#中的值传递ref.对于标记为的参数ref,对参数的引用将传递给方法,现在您可以将该参数视为别名.因此,当你说
void M(ref int m) { m = 10; }
int n = 123;
M(ref n);
Run Code Online (Sandbox Code Playgroud)
你能想到的m在M为的别名n.这是m和n是只是两个相同的存储位置不同的名字.
这是非常不同的
string s = "Hello, world!";
string t = s;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,s并t没有alises对于相同的储存位置.这是碰巧引用同一对象的两个不同变量.
那么`out关键字呢?这仍然意味着它是通过引用传递的吗?
ref和之间的唯一区别out是ref需要在传递之前初始化变量.
Ode*_*ded 13
对象的引用将按值传递.
.NET具有引用类型和值类型 - 类都是引用类型,而结构是值类型.您可以按值或按引用传递一个.
默认情况下,一切都按值传递的,不同的是引用类型的引用被通过.
在ref和out关键字将导致参数按引用传递-价值类型,这意味着您现在可以将在传入的对象反映变化的情况下.使用引用类型意味着您现在可以更改引用引用的对象.
| 归档时间: |
|
| 查看次数: |
13206 次 |
| 最近记录: |