private int _myField;
public int MyField
{
get {
return _myField * 99;
}
set {
_myField * value;
}
}
我见过开发人员在Getter中添加了更复杂的代码,设置了其他成员和属性等。对我来说,返回除关联成员变量之外的值会导致调试混乱。
这样更好吗?
private int _myField;
public int MyField
{
get {
return _myField = _myField * 99;
}
set {
_myField * value;
}
}
还是这个?
private int _myField;
public int MyField
{
get {
return _myField;
}
set {
_myField = value * 99;
}
}
答案 0 :(得分:3)
这些都不好。在某些情况下,设置其他成员,执行缓存等都没有问题 - 毕竟,没有规则说属性只是由没有逻辑的成员变量支持,并且验证是非常的你想要其他逻辑的好例子。
然而,编写属性通常不是一个好主意,因此获取您刚刚设置的值将给出截然不同的答案。特别是,
foo.SomeProperty = foo.SomeProperty;
几乎从不做任何有意义的事情(而在你的例子中,它会改变价值)。
(话虽如此,前两个示例的setter代码已被破坏。)
答案 1 :(得分:1)
嗯,存在属性的原因之一是你可以像这样做。属性是一种封装形式,使您能够隐藏需要向调用者隐藏的任何逻辑。
我个人的理念是,像你这样的东西很好(即简单的数据操作不会产生副作用)但是一旦逻辑变得比几行更复杂,你应该转换为指示给调用者的方法更多的事情正在发生。
答案 2 :(得分:1)
我认为你的第二个片段违反了代码的语义。使用getter不应该影响公共值 - 也就是说,你可以在getter中做任何你想做的事情,比如缓存或延迟初始化等等 - 但在外部,对getter的两次连续调用应该返回相同的结果。