c# - 只读属性 setter

标签 c# properties

经过广泛的调试 session 后,我发现问题出在我调用了只读属性的 setter 。发生这种情况时是否有技巧来引发编译器警告?因为将 setter 标记为私有(private)不起作用。

干杯,

CA


明确我的意思:

    private readonly List<SomeObject> _budget;
    public IEnumerable<SomeObject> Budget
    {
        get
        {
            return _budget;
        }
    }

可以访问

A.Budget=new SomeObject();

没有编译器{error,warning,message}

最佳答案

你在这里混淆了一些东西。在您的示例中,如果您尝试执行 A.Budget=new SomeObject();,编译器将产生错误。如果属性Budget在类里面A没有二传手。 从这里开始,我只能假设您的问题是什么。

我的猜测是您希望将集合包装在 Budget 中属性为只读。这可能就是你成功的原因 IEnumerable<SomeObject>而私有(private)成员是 List<SomeObject> .所以即使你没有二传手,你仍然可以做 (A.Budget as List<SomeObject>).Add(bla) .要禁止此操作,您可以使用 List.AsReadOnly像这样:

private readonly List<SomeObject> _budget;
public ReadOnlyCollection<SomeObject> Budget
{
    get
    {
        return _budget.AsReadOnly();
    }
}

关于c# - 只读属性 setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2691090/

相关文章:

java - 在桌面应用程序上外部化数据库配置的最佳方法是什么?

c# - 通过其容器的 get 访问器通过 set 访问器为属性赋值是一件坏事吗?

java - 如何复制 java.util.Properties 对象?

c# - 我怎样才能允许一个类被声明为使用 float 或 double ?

c# - 在C#中,整数文字是什么类型?

c# - ASP.NET 自定义验证器 + WebMethod + jQuery

c# - 图片按钮作为默认按钮

c# - 以管理员身份运行 Powershell 命令 - 命令本身不会加载

java - 为什么我不能在我的 Properties 文件中读取 Integer?

Grails 索引参数