是否有可能通过ref传递属性的变通方法?再加上参考发生率

时间:2014-05-20 17:03:06

标签: c# reference pass-by-reference ref

参考类型(Class)的自动属性是否可以通过Ref传递?

我唯一想到的就是不使用自动属性:只需要像往常一样声明私有变量并通过ref传递它,如果需要的话,将公共属性添加到一边。
坦率地说,它看起来有点愚蠢(所有官僚机构都需要绕过它)

我的问题:
1.为什么编译器不允许自动属性通过ref传递(就像它是一个简单的数据成员)? 2.什么时候使用或应该使用Ref?我注意到有人说使用它可能只在极少数情况下才会发生。它们是什么?

2 个答案:

答案 0 :(得分:9)

  

为什么编译器不允许自动属性通过ref传递

因为它不是参考 - 它是一个方法对(get / set)。解决方法是创建一个局部变量来保存属性的值,通过引用传递 ,并将属性设置为更新的值:

var temp = myObj.myProperty;
MethodWithRefParam(ref temp);
myObj.MyProperty = temp;

正如你所说,你可以通过引用传递支持属性,但只能从该类中传递。

  

我们什么时候使用或应该使用Ref?

通常 ref(和out,这是ref)参数的一个特例,只有在返回时使用值不实用TryParse是一个常见的框架示例。该方法不返回解析后的值,而是返回bool,告诉您解析是否成功,并且"返回" out参数中的已解析值。

ref与引用类型一起使用通常是一种代码气味,可能表明作者并不了解引用类型的工作原理。

答案 1 :(得分:1)

您使用自动属性,因为它允许您最终更改属性的实现方式而不会影响相关代​​码。在财产上没有任何特殊标记,它被实现为“自动”。即使您查看方法的IL,您也只会发现它是一个具有支持字段的属性。

结果编译器无法做出任何假设,如果此属性是自动生成的,并将所有属性视为常规属性。