你能给一个身体只能获得或设置一个属性吗?

时间:2017-06-26 20:41:55

标签: c#

    public int a{
        get;
        set{
            if (value <= b)
                a = value;
            if (value > b)
                a = b;
        }
    }

在上面的例子中是否有可能避免让身体得到,尽管它是一个简单的回归a;?

2 个答案:

答案 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;
    }
}

无论哪种方式,如果您使用自定义实现,都无法使用getset的自动实现。

注意:我将对a的引用更改为对支持字段_a的引用,否则您的代码将永远循环。