当你设计不可变类时,你喜欢:
Layer.ColorCorrect ( layer )
或
layer.ColorCorrect ( )
对我而言,#1 似乎比#2 更直观,它看起来修改了引用的对象,因为它是一个实例方法,它还不如更改内部结构,对吧?
最佳答案
我更愿意使用实例方法,但选择名称以反射(reflect)它不会更改现有实例这一事实。例如:
layer.AfterColorCorrection()
或
layer.WithCorrectedColors()
使用静态方法很快就会变得乏味。此外,如果您向用户明确表示该类型是不可变的,他们应该会很快掌握这一点。每个人都被 String.Replace
绊倒了,实际上并没有替换目标中的任何东西——但他们不会一直犯同样的错误。 还有更好的名字你应该没问题。
我问了一个related question关于“添加”到不可变列表 - IMO 的最佳解决方案是使用“Plus”而不是“Add”;同样,这并不意味着原始值已更改。您可能会发现该问题的其他答案很有用。
https://stackoverflow.com/questions/706424/