日期:2014-05-17  浏览次数:20681 次

属性可能造成明显的side effect?
看书看到:
属性可能造成明显的side effect;字段永远不会。换言之,类型的使用者应该能按照其选择的任何顺序设置类型定义的各个属性,而不会造成类型中(因为设置顺序不同)出现不同的行为。

下面对side effect的解释是,访问属性时,除了单纯地设置或获取属性,还会造成对象状态的改变。

我表示我完全不明白他在说什么。
1.属性可能造成明显的side effect?字段就不造成?
2.属性的设置顺序会造成类型的不同行为?
大家能帮忙举个例子吗?
属性 side?effect

------解决方案--------------------
textBox1.Text="这就是副作用。没有副作用你就不会在文本框中看到这行字。";


第2点那个,是设计类库时要尽量避免的,不应该假定或者要求使用者按照特定的顺序设置或访问属性。

------解决方案--------------------
1、因为属性的读取或赋值包含逻辑,而字段永远不会包含逻辑。
如果你非要说字段有时候也是经过一大推逻辑运算才得出,那么在我读取该字段的值时,这些肯定不会运行,因为这些逻辑只能在一些事件中或者方法中运行。但是读取或设置属性却不一样。

2、如果设置类库的属性设置或访问还要规定顺序,那么 ,我说这个设计的人是很丑陋的,很低级的。因为他极大的增加了属性的副作用,甚至完全依靠一定顺序的属性来定制改变对象的状态。这种类型不用也罢,十分恶心。比如类型有A、B属性,当我必须设置了A才能设置B时,此时对象本身就存在了不同的行为,这样导致副作用很难控制。