加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 03:42:06 所属栏目:百科 来源:网络整理
导读:我继承了一些使用ref关键字广泛而不必要的代码.原来的开发者显然担心,如果没有使用ref,那么对象将被克隆为原始类型,并且在编写50k行代码之前并没有打算研究这个问题. 这与其他不好的编码实践相结合,造成了一些表面上非常危险的情况.例如: Customer person =
我继承了一些使用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.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读