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

Jav*_*aSa 2 c# reference ref pass-by-reference

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

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

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

D S*_*ley 9

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

因为它不是引用 - 它是一个方法对(get/set).解决方法是创建一个持有的属性的值的局部变量,传递的是引用,并设置属性来更新值:

var temp = myObj.myProperty;
MethodWithRefParam(ref temp);
myObj.MyProperty = temp;
Run Code Online (Sandbox Code Playgroud)

如您所说,您可以通过引用传递backing属性,但只能从该类中传递.

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

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

使用ref引用类型通常是代码气味,可能表明作者不理解引用类型的工作方式.