c# – Ref滥用:值得清理?

前端之家收集整理的这篇文章主要介绍了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

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

可怕,但实际上在这个应用中使用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.

如果代码正如预期的那样工作,并且您的开发人员了解这些差异,则可能不值得将其全部删除.

猜你在找的C#相关文章