参考滥用:值得清理?

Kar*_*der 11 c# ref

我继承了一些广泛而不必要地使用ref关键字的代码.如果不使用ref,原始开发人员显然担心对象会被克隆为原始类型,并且在编写50k +代码行之前没有费心去研究这个问题.

这与其他不良编码实践相结合,创造了一些表面上非常危险的情况.例如:


Customer person = NextInLine(); 
//person is Alice
person.DataBackend.ChangeAddress(ref person, newAddress);
//person could now be Bob, Eve, or null
Run Code Online (Sandbox Code Playgroud)

你能想象走进商店改变你的地址,走出一个完全不同的人吗?


可怕,但在实践中,在这个应用程序中使用ref似乎是无害的多余.我无法证明清理它需要花费大量时间.为了帮助推销这个想法,我提出了以下问题:

如何不必要地使用ref是破坏性的?

我特别关心维护.具有实例的合理答案是优选的.

我们也欢迎你争辩说没有必要进行清理.

Joh*_*sch 8

我想说最大的危险是如果参数null由于某种原因设置在函数内部:

public void MakeNull(ref Customer person)
{
    // random code
    person = null;
    return;
}
Run Code Online (Sandbox Code Playgroud)

现在,你不仅仅是一个与众不同的人,你已经完全被淘汰了!

只要开发此应用程序的任何人都理解:

默认情况下,对象引用按值传递.

和:

使用ref关键字,对象引用通过引用传递.

如果代码现在按预期工作,并且您的开发人员了解其中的差异,则可能不值得将其全部删除.