当传入一个将被修改为方法的对象时,是否有一种方法来指示这一点
本文关键字:方法 是否 这一点 对象 一种 指示 一个 修改 | 更新日期: 2023-09-27 18:02:50
我有一个对象,它被传递给一个要修改的方法。这种行为似乎很少见,所以我想确保其他开发者不会被它绊倒,并且它很容易被发现。我能做点什么让你明白发生了什么吗?
方法调整对象的一些属性,但它不返回对象。也许它应该退货?
myObject = Processor(myObject);
是多余的,但它会使它更清楚…?
我唯一能想到的是在界面之前添加ref
,但不确定这是否是个好主意。什么好主意吗?
不,返回相同的引用并不能使它更清晰——在某些情况下,这样的方法可能会克隆对象并返回不同的版本,例如
string Escape(string input)
确实,因为void
方法不能返回任何东西,它的存在几乎可以保证会有副作用。它没有说明副作用是在调用的目标上还是在引用上,但至少它隐含地强调了您应该考虑副作用是什么。返回值的方法可以很容易地避免副作用。
ref
是错误的-这表明您希望能够更改调用者的变量以引用不同的对象,这与修改现有对象中的数据是不一样的。这会给人错误的印象。
最终,有两种方法:
- 首先不要使用可变类型:)
- 依赖方法命名和文档
在这种情况下,返回对象没有立即的附加价值,因为这意味着您必须创建一个克隆并返回它,从而导致不必要的工作,并可能导致性能问题。
在这种情况下,我将简单地使用动词来命名您的操作,以清楚地表明它的作用,例如:
void FillInMissingProperties(MyObject myObject);
添加一些带有简短解释的XML文档
可选的扩展方法也可以用来用这种方法扩展类:
myObject.FillInMissingProperties();