如何在C#类构造函数中使用const

-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,因此他们不会添加它。

Avn*_*tan 8

你不能 根据定义,constC#中的s是在编译时而不是在运行时定义的。它们无法用任何代码甚至构造函数代码进行更改,因为它们甚至在运行时都不存在,它们在使用的每个点都被其文字值所替换。

您要寻找的是readonly fieldsread only properties

  1. 只读字段由readonly修饰符标记:

    private readonly string _username;

    只读字段只能在构造期间分配,可以在定义本身(readonly string _username = "blah")或构造函数中直接分配。编译器将强制执行此限制,并且不允许您在其他任何地方设置值。

  2. 只读属性只是根本不公开setter的属性。在C#6之前,您可以使用它们返回只读字段的值(如上所述),但不能将其分配给它们。但是从C#6开始,有语法支持可以分配的只读自动属性:即使没有显式的setter,也有一个隐式的setter只能再次从构造函数或字段初始化程序中调用:

    public string Username { get } = "Username";

    您将属性设置为不带setter的方法似乎很奇怪,但这只是语言的隐式部分-有一个隐式后备字段为readonly,可以在初始化时进行设置。