-2 c# constructor const constants
假设我有一个这样的课程:
public class SampleClass
{
const string UnChangableUserName { get; private set; }
string Password { get; private set; }
public SampleClass(string UnChangableUserName, string Password)
{
this.Password = Password;
this.UnChangableUserName = UnChangableUserName;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望构造函数为const分配一个值,而不是在定义const时要设置的值。我该怎么做?
我知道我不能简单地使用set,但是使用const可以更有效地利用资源,并且更加优雅,其他开发人员也更容易理解,我不希望有set,因此他们不会添加它。
你不能 根据定义,constC#中的s是在编译时而不是在运行时定义的。它们无法用任何代码甚至构造函数代码进行更改,因为它们甚至在运行时都不存在,它们在使用的每个点都被其文字值所替换。
您要寻找的是readonly fields或read only properties。
只读字段由readonly修饰符标记:
private readonly string _username;
只读字段只能在构造期间分配,可以在定义本身(readonly string _username = "blah")或构造函数中直接分配。编译器将强制执行此限制,并且不允许您在其他任何地方设置值。
只读属性只是根本不公开setter的属性。在C#6之前,您可以使用它们返回只读字段的值(如上所述),但不能将其分配给它们。但是从C#6开始,有语法支持可以分配的只读自动属性:即使没有显式的setter,也有一个隐式的setter只能再次从构造函数或字段初始化程序中调用:
public string Username { get } = "Username";
您将属性设置为不带setter的方法似乎很奇怪,但这只是语言的隐式部分-有一个隐式后备字段为readonly,可以在初始化时进行设置。