c# - 如何实现只读属性

标签 c# properties readonly

我需要在我的类型上实现一个只读 属性。此外,此属性的值将在构造函数中设置并且不会更改(我正在编写一个类来公开 WPF 的自定义路由 UI 命令,但这并不重要)。

我看到了两种方法:

  1. class MyClass
    {
        public readonly object MyProperty = new object();
    }
    
  2. class MyClass
    {
        private readonly object my_property = new object();
        public object MyProperty { get { return my_property; } }
    }
    

所有这些 FxCop 错误都说我不应该有公共(public)成员变量,看来第二种方法是正确的。正确吗?

在这种情况下,只获取属性和只读成员之间有什么区别吗?

如有任何意见/建议/等,我将不胜感激。

最佳答案

第二种方式是首选。

private readonly int MyVal = 5;

public int MyProp { get { return MyVal;}  }

这将确保 MyVal 只能在初始化时赋值(它也可以在构造函数中设置)。

正如您所指出的 - 这样您就不会公开内部成员,从而允许您在将来更改内部实现。

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

相关文章:

java - 从 log4j 附加程序中的 WEB-INF 文件夹加载属性文件

c# - 移动到只读文本框中文本的末尾

.net - .Net 中编译器实现的不变性

c# - 如何使用 Mono 的 mcs 来编译和运行 csproj 文件?

c# - 焦点标签显示虚线作为边框

properties - 在 Render 函数中传递 props

Spring:@Transactional with readonly=true 不调用 conn.setReadOnly(true)

c# - 有没有办法强制应用程序以单线程方式运行?

c# - 将实体映射到存储过程时,如何在调用 SaveChanges() 后获取实体的标识

entity-framework - 找不到为 Entity Framework 创建的属性的 PropertyGrid Browsable,如何找到它?