【问题标题】:How to make class property readonly? [duplicate]如何使类属性只读? [复制]
【发布时间】:2014-06-20 07:04:29
【问题描述】:

让我们看看下面的例子:

public Data()
{
   ConnectionString = DefaultConnectionString;
}

public Data(string connectionString)
{
   ConnectionString = connectionString;
}

public string DefaultConnectionString
{
   get
   {
       return System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnectionString"].ConnectionString;
   }
}

public string ConnectionString { get; set; }

这里我有基于连接字符串或默认连接字符串处理 sql 连接和操作的类。而ConnectionString 属性在逻辑上我用作readonly,即仅从constructor 设置。但在这种情况下,属性也可以从其他任何地方设置。
那么有什么优雅的方式来定义这样的属性吗?

【问题讨论】:

  • 私有只读字符串 connectionString; public string ConnectionString { get { return connectionString;}} 在构造函数中设置 connectionString 字段...
  • 我认为 Heinzi 不明白我的问题。我知道私有集的使用。
  • 为什么不能使用在构造函数中设置的只读字段并在属性的获取中返回?
  • 什么是更好的解决方案?这是高度可读的,它完全符合您的要求。

标签: c# properties readonly


【解决方案1】:

将设置器设为私有

public string ConnectionString { get; private set; }

这样属性只能私下设置,公开读取

【讨论】:

  • 即使拥有私有访问修饰符,也可以在类本身中设置该属性。但在这里我想要属性,但只能从构造函数而不是从其他地方设置
  • 我认为以添加私有设置器的方式将其设置为构造函数就足够了,该属性仅在对象实例的持续时间内有效,并且只能由其他成员设置班级。由于您可以控制代码流,因此不要在其他地方设置它。 Jon Skeet 可能会在这篇文章中找到你想要的答案? stackoverflow.com/questions/2480503/…。你为什么还要努力实现这一目标?
  • @M Patel 我想你不明白我的问题,我在问一些与你的答案无关的问题。
猜你喜欢
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 2015-08-14
  • 2011-11-08
  • 2011-03-20
  • 2010-12-14
  • 2016-11-26
相关资源
最近更新 更多