我有一个对象,它被传递给一个要改变的方法。这种行为似乎非常罕见,所以我想确保其他开发人员不会绊倒它并且很容易看到。我能做些什么才能明白发生了什么?
该方法调整对象的某些属性,但它不会返回对象。也许应该归还它?
myObject = Processor(myObject);
会多余,但会更清楚......?
我唯一能想到的是在界面中添加ref
,但不确定这是不是一个好主意。有什么想法吗?
答案 0 :(得分:7)
不,返回相同的引用并不会更清楚 - 在某些情况下,这种方法可能会克隆对象并返回不同的版本,例如
string Escape(string input)
确实,因为void
方法不能返回任何东西,它的存在几乎可以保证会产生副作用。它没有说明副作用是在呼叫的目标上还是在参考上,但至少它隐含地强调你应该考虑副作用是什么。返回值的方法很容易没有副作用。
同样地使用ref
是错误的 - 这表明您希望能够更改调用者的变量以引用不同的对象,这与修改中的数据绝不相同现有的对象。它给人的印象是错误的。
最终,有两种方法:
答案 1 :(得分:1)
在这种情况下,返回对象将没有立即增值,因为这意味着您必须进行克隆并返回它,从而导致不必要的工作并可能导致性能问题。
在这种情况下,我只需使用动词命名您的操作,这清楚地表明它的作用,例如:
void FillInMissingProperties(MyObject myObject);
添加一些XML文档,并附上简短说明。
可选的扩展方法也可以用于使用这种方法扩展类:
myObject.FillInMissingProperties();