readonly属性设定者

Ano*_*ard 2 c# properties

经过广泛的调试会议后,我发现问题在于我调用了readonly属性的setter.发生这种情况时是否有引发编译器警告的技巧?因为将setter私有标记不起作用.

干杯,

CA


说清楚我的意思:

    private readonly List<SomeObject> _budget;
    public IEnumerable<SomeObject> Budget
    {
        get
        {
            return _budget;
        }
    }
Run Code Online (Sandbox Code Playgroud)

可以访问

A.Budget=new SomeObject();
Run Code Online (Sandbox Code Playgroud)

没有编译器{错误,警告,消息}

Ada*_*son 8

如果您的酒店有一个setter,它不是只读的.删除setter使其成为只读.

public string MyProperty // not read-only
{
    get { return myPropertyBacking; }
    set { myPropertyBacking = value; }
}

public string MyProperty // read-only
{
    get { return myPropertyBacking; }
}
Run Code Online (Sandbox Code Playgroud)


bit*_*onk 8

你在这里混淆了什么.在您的示例中,如果您尝试在类中A.Budget=new SomeObject();的属性没有setter时,编译器将产生错误.从这里开始,我只能假设你的问题是什么.BudgetA

我的猜测是你希望包含在Budget属性中的集合是只读的.这可能就是你制作它的原因,IEnumerable<SomeObject>而私人会员则是List<SomeObject>.因此,即使你没有安装者,你仍然可以做到(A.Budget as List<SomeObject>).Add(bla).要禁止此操作,您可以像这样使用List.AsReadOnly:

private readonly List<SomeObject> _budget;
public ReadOnlyCollection<SomeObject> Budget
{
    get
    {
        return _budget.AsReadOnly();
    }
}
Run Code Online (Sandbox Code Playgroud)