c#属性,使用自动实现的私有集获取

时间:2013-09-25 06:56:19

标签: c# properties field automatic-properties

使用c#自动实现的属性我可以使用一个类来执行以下操作(伪造的C#代码,因为我收到错误 - 在尝试编译时会出现以下错误):

public class Foo {
    public String HouseName { get; private set; }
    public int HouseId { get; private set; }
    public int BedsTotal { 
        get { return (BedsTotal < 0) ? 0 : BedsTotal; }
        private set;
    }
}

错误5'House.BedsTotal.set'必须声明一个正文,因为它没有标记为abstract,extern或partial c:\ src \ House.cs

对我来说,似乎我应该能够为getter获取一个body并依赖于自动生成的私有集,就像我做了{get;私人集;但那不起作用。

我是否需要全程设置成员变量,关闭私有设置器,然后使用成员变量?

谢谢!

2 个答案:

答案 0 :(得分:2)

是的,您需要设置私有变量,因为此时您最终会尝试读取get {}部分,因为它会引用自身。

设置一个私有支持变量,如下所示:

private int _bedsTotal;
public int BedsTotal { 
        get { return (_bedsTotal < 0) ? 0 : _bedsTotal; }
        private set { _bedsTotal = value; }
    }

然后你可以通过私人安装者访问床位

答案 1 :(得分:2)

我会采取更简单的方法

private int _bedsTotal;
public int BedsTotal
{ 
    get
    {
        return (this._bedsTotal < 0) ? 0 : this._bedsTotal;
    }
    private set
    {
        this._bedsTotal = value;
    }
}

因此您可以设置BedsTotal的值,如下所示:this.BedsTotal = [integer];,无需使用其他私有方法,因为您可以使用set