当传入一个将被修改为方法的对象时,是否有一种方法来指示这一点

本文关键字:方法 是否 这一点 对象 一种 指示 一个 修改 | 更新日期: 2023-09-27 18:02:50

我有一个对象,它被传递给一个要修改的方法。这种行为似乎很少见,所以我想确保其他开发者不会被它绊倒,并且它很容易被发现。我能做点什么让你明白发生了什么吗?

方法调整对象的一些属性,但它不返回对象。也许它应该退货?

myObject = Processor(myObject);是多余的,但它会使它更清楚…?

我唯一能想到的是在界面之前添加ref,但不确定这是否是个好主意。什么好主意吗?

当传入一个将被修改为方法的对象时,是否有一种方法来指示这一点

不,返回相同的引用并不能使它更清晰——在某些情况下,这样的方法可能会克隆对象并返回不同的版本,例如

string Escape(string input)

确实,因为void方法不能返回任何东西,它的存在几乎可以保证会有副作用。它没有说明副作用是在调用的目标上还是在引用上,但至少它隐含地强调了您应该考虑副作用是什么。返回值的方法可以很容易地避免副作用。

同样地,使用ref是错误的-这表明您希望能够更改调用者的变量以引用不同的对象,这与修改现有对象中的数据是不一样的。这会给人错误的印象。

最终,有两种方法:

  • 首先不要使用可变类型:)
  • 依赖方法命名和文档

在这种情况下,返回对象没有立即的附加价值,因为这意味着您必须创建一个克隆并返回它,从而导致不必要的工作,并可能导致性能问题。

在这种情况下,我将简单地使用动词来命名您的操作,以清楚地表明它的作用,例如:

 void FillInMissingProperties(MyObject myObject);

添加一些带有简短解释的XML文档

可选的扩展方法也可以用来用这种方法扩展类:

myObject.FillInMissingProperties();