public int a{
get;
set{
if (value <= b)
a = value;
if (value > b)
a = b;
}
}
在上面的例子中是否有可能避免让身体得到,尽管它是一个简单的回归a;?
答案 0 :(得分:5)
不,不是。
您的set
访问者无限地调用自己。
如果你有get { return a; }
,那么吸气者也会永远地自我调用。它不是自动属性,如果在访问器上有正文,则不存在自动后备字段。
答案 1 :(得分:0)
是。只是不要声明get
部分。这会产生只写属性(您无法使用auto-implemented getter)。
public int a {
set {
if (value <= b)
_a = value;
if (value > b)
_a = b;
}
}
如果你仍然希望能够获得价值,但又不想暴露这些价值,你可以将其变为私人或内部,例如。
public int a {
internal get {
return _a;
}
set {
if (value <= b)
_a = value;
if (value > b)
_a = b;
}
}
无论哪种方式,如果您使用自定义实现,都无法使用get
或set
的自动实现。
注意:我将对a
的引用更改为对支持字段_a
的引用,否则您的代码将永远循环。