传入将要修改为方法的对象时,有没有办法表明这一点?

时间:2014-05-12 14:21:28

标签: c#

我有一个对象,它被传递给一个要改变的方法。这种行为似乎非常罕见,所以我想确保其他开发人员不会绊倒它并且很容易看到。我能做些什么才能明白发生了什么?

该方法调整对象的某些属性,但它不会返回对象。也许应该归还它?

myObject = Processor(myObject);会多余,但会更清楚......?

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

2 个答案:

答案 0 :(得分:7)

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

string Escape(string input)

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

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

最终,有两种方法:

  • 首先没有可变类型:)
  • 依靠方法命名和文档

答案 1 :(得分:1)

在这种情况下,返回对象将没有立即增值,因为这意味着您必须进行克隆并返回它,从而导致不必要的工作并可能导致性能问题。

在这种情况下,我只需使用动词命名您的操作,这清楚地表明它的作用,例如:

 void FillInMissingProperties(MyObject myObject);

添加一些XML文档,并附上简短说明。

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

myObject.FillInMissingProperties();