我将一个类的实例传递给一个方法,该方法将修改该实例.
我是否需要使用out或ref关键字,因为这是我传递的类?
这就是我想要做的:
public void Blah()
{
Blah b = Dao.GetBlah(23);
SomeService.ModifyXml(b); // do I need to use out or ref here?
Dao.SaveXml(b.xml);
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 14
考虑这个问题的正确方法是:在想要为变量创建别名时使用ref/out.也就是说,当你说:
void M(ref int x) { x = 10; }
...
int q = 123;
M(ref q);
Run Code Online (Sandbox Code Playgroud)
你所说的是"x是变量q的另一个名字".对x 的内容的任何更改都会改变q,并且对q的内容的任何更改都会改变x,因为x和q只是完全相同存储位置的两个名称.
请注意,这与引用同一对象的两个变量完全不同:
object y = "hello";
object z = y;
Run Code Online (Sandbox Code Playgroud)
这里我们有两个变量,每个变量有一个名称,每个变量引用一个对象,两个变量都引用同一个对象.在前面的示例中,我们只有一个带有两个名称的变量.
明白了吗?
如果b没有修改引用,并且只b修改了属性,则既不需要ref也不需要out.只有在修改引用本身时,这两者才会适用.
我已经向您展示的示例代码一点,包括使用情况ref,out以及既不是:
[剪断]
public void Run()
{
Blah b = Dao.GetBlah(23);
SomeService.ModifyXml(b); // do I need to use out or ref here?
Dao.SaveXml(b.Xml);
SomeService.SubstituteNew(out b);
Dao.SaveXml(b.Xml);
SomeService.ReadThenReplace(ref b);
Dao.SaveXml(b.Xml);
}
Run Code Online (Sandbox Code Playgroud)
其余代码在PasteBin中.
| 归档时间: |
|
| 查看次数: |
597 次 |
| 最近记录: |