我继承了一些使用ref关键字广泛而不必要的代码.原来的开发者显然担心,如果没有使用ref,那么对象将被克隆为原始类型,并且在编写50k行代码之前并没有打算研究这个问题.
这与其他不好的编码实践相结合,造成了一些表面上非常危险的情况.例如:
Customer person = NextInLine(); //person is Alice person.DataBackend.ChangeAddress(ref person,newAddress); //person could now be Bob,Eve,or null
你能想象走进商店改变你的地址,走出去是一个完全不同的人吗?
可怕,但实际上在这个应用中使用ref似乎是无害的多余的.我有麻烦证明需要大量的时间来清理它.为了帮助出售这个想法,我提出了以下问题:
如何不必要地使用ref是破坏性的?
我特别关心维护.具有实例的合理答案是首选.
你也欢迎辩论清理是不必要的.
解决方法
我会说最大的危险是,如果由于某种原因参数在函数内设置为null:
public void MakeNull(ref Customer person) { // random code person = null; return; }
现在,你不只是一个不同的人,你已经完全被抹去了!
只要任何开发此应用程序的人都了解:
By default,object references are passed by value.
和:
With the
ref
keyword,object references are passed by reference.