C# 如何使类属性为只读?

C# 如何使类属性为只读?,c#,properties,readonly,C#,Properties,Readonly,让我们看看下面的例子: public Data() { ConnectionString = DefaultConnectionString; } public Data(string connectionString) { ConnectionString = connectionString; } public string DefaultConnectionString { get { return System.Configuration.Con

让我们看看下面的例子:

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
,即仅从
构造函数设置。但是在这种情况下,属性也可以从任何其他地方设置。
那么有什么优雅的方法来定义这样的属性吗?

将setter设置为私有

public string ConnectionString { get; private set; }

这样,属性只能设置为私有,并且只能公开读取

将setter设置为私有

public string ConnectionString { get; private set; }

这样,属性只能设置为私有,并且只能公开读取

将setter设置为私有

public string ConnectionString { get; private set; }

这样,属性只能设置为私有,并且只能公开读取

将setter设置为私有

public string ConnectionString { get; private set; }


这样一来,属性只能设置为私有并公开读取

即使具有私有访问修饰符,也可以在类本身中设置该属性。但这里我想要属性,但只从构造函数设置,而不是从其他地方设置,我认为以添加私有setter的方式将其设置为构造函数应该足够了,该属性只在对象实例的持续时间内有效,并且只能由类的其他成员设置。由于您可以控制代码流,所以只需确保您不在其他地方设置它。Jon Skeet可能会持有你在这篇文章中所追求的答案。你为什么要这么做?@M Patel我想你不明白我的问题,我在问一些与你的答案无关的问题。即使有私有访问修饰符,也可以在类本身设置该属性。但这里我想要属性,但只从构造函数设置,而不是从其他地方设置,我认为以添加私有setter的方式将其设置为构造函数应该足够了,该属性只在对象实例的持续时间内有效,并且只能由类的其他成员设置。由于您可以控制代码流,所以只需确保您不在其他地方设置它。Jon Skeet可能会持有你在这篇文章中所追求的答案。你为什么要这么做?@M Patel我想你不明白我的问题,我在问一些与你的答案无关的问题。即使有私有访问修饰符,也可以在类本身设置该属性。但这里我想要属性,但只从构造函数设置,而不是从其他地方设置,我认为以添加私有setter的方式将其设置为构造函数应该足够了,该属性只在对象实例的持续时间内有效,并且只能由类的其他成员设置。由于您可以控制代码流,所以只需确保您不在其他地方设置它。Jon Skeet可能会持有你在这篇文章中所追求的答案。你为什么要这么做?@M Patel我想你不明白我的问题,我在问一些与你的答案无关的问题。即使有私有访问修饰符,也可以在类本身设置该属性。但这里我想要属性,但只从构造函数设置,而不是从其他地方设置,我认为以添加私有setter的方式将其设置为构造函数应该足够了,该属性只在对象实例的持续时间内有效,并且只能由类的其他成员设置。由于您可以控制代码流,所以只需确保您不在其他地方设置它。Jon Skeet可能会持有你在这篇文章中所追求的答案。你为什么要这样做?@M Patel我想你不明白我的问题,我问的问题与你的答案无关;公共字符串ConnectionString{get{return ConnectionString;}}}在构造函数中设置ConnectionString字段……我想Heinzi不理解我的问题。我知道私有集的用法。为什么不能使用在构造函数中设置的只读字段,并在属性的get中返回?有什么更好的解决方案?这是高度可读的,并且它完全符合您的要求;公共字符串ConnectionString{get{return ConnectionString;}}}在构造函数中设置ConnectionString字段……我想Heinzi不理解我的问题。我知道私有集的用法。为什么不能使用在构造函数中设置的只读字段,并在属性的get中返回?有什么更好的解决方案?这是高度可读的,并且它完全符合您的要求;公共字符串ConnectionString{get{return ConnectionString;}}}在构造函数中设置ConnectionString字段……我想Heinzi不理解我的问题。我知道私有集的用法。为什么不能使用在构造函数中设置的只读字段,并在属性的get中返回?有什么更好的解决方案?这是高度可读的,并且它完全符合您的要求;公共字符串ConnectionString{get{return ConnectionString;}}}在构造函数中设置ConnectionString字段……我想Heinzi不理解我的问题。我知道私有集的用法。为什么不能使用在构造函数中设置的只读字段,并在属性的get中返回?有什么更好的解决方案?这是高度可读的,它完全符合您的要求。