【发布时间】:2014-01-23 00:35:29
【问题描述】:
这对我来说太时髦了,显然开发人员应该使用关键字 out 但我不敢相信这甚至可以工作:
public BusinessResponse<MyResultType> MyMethod(){
BusinessResponse<MyResultType> res = new BusinessResponse<MyResultType>();
ProcessResult(res);
return res; //this has the values set by ProcessResult!!! How?
}
private void ProcessResult(BusinessResponse<MyResultType> result)
{
result.State = BusinessResponseState.Success;
//set some other stuff in the result argument
}
我的同事说这叫做“深度引用”,我不敢相信这在 C# 中有效。我会重构为使用 out aka private void ProcessResult(out BusinessResponse<MyResultType> result) 但我仍然想知道为什么这段代码有效。
更新
所以看起来我不正确,这段代码很好。似乎情绪是,作为 C# 开发人员,我应该立即知道,因为传递给 processResult 的参数是堆上的引用类型,通过值传递,引用本身的副本被制作,并且复制的引用仍然指向同一个对象。
【问题讨论】:
-
对象通过引用传递。如果这是一个值类型,它将按照您的预期工作。
-
啊,当然,谢谢 TheEvilPenguin ;)
-
对不起,我只是不小心回滚了某人的编辑,不是故意的
-
回复:您的更新。是的,您只需要(非常快速地)熟悉您在 C# 中对对象所做的大多数事情都是通过引用完成的这一事实。
标签: c#