0

使用 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' 必须声明一个主体,因为它没有标记为抽象、外部或部分 c:\src\House.cs

对我来说,似乎我应该能够为 getter 获得一个主体,并依赖自动生成的私有集,就像我执行 { get; 私人套装;但这不起作用。

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

谢谢!

4

2 回答 2

3

是的,您需要设置私有变量,因为此时您将进入一个循环尝试读取该get {}部分,因为它引用了自己。

像这样设置一个私有后备变量:

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

然后您可以通过私人二传手访问床位

于 2013-09-25T07:00:00.727 回答
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

于 2013-09-25T07:07:51.983 回答