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

25 浏览
0 Comments

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

假设我有一个像这样的类:\n

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;
    }
}

\n我想让构造函数给常量赋值,而不是在常量定义时设置值。我该怎么做呢?\n我知道我可以不使用set,但使用const更节省资源,更优雅,同时也更清晰地让其他开发人员理解,我不想要一个set,这样他们就不会添加它。

0
0 Comments

在C#类构造函数中使用const关键字的问题是const是在编译时被解析的常量。这意味着无法将const关键字用于在运行时确定值的情况。相反,我们需要使用readonly属性来实现类似的功能。

解决方法是使用readonly属性来代替const关键字。readonly属性允许我们在运行时初始化变量,并且只能在构造函数内部或实例初始化器中进行赋值。这使得我们能够在构造函数中设置变量的值,以便在创建类的新实例时将其初始化为所需的值。

下面是一个示例代码,演示了如何在C#类构造函数中使用readonly属性:

public class MyClass
{
    private readonly int myVariable;
    public MyClass(int value)
    {
        myVariable = value;
    }
}

在上面的代码中,我们声明了一个名为myVariable的私有变量,并使用readonly关键字将其定义为只读。然后,在构造函数中,我们可以使用传递给构造函数的值来初始化myVariable变量。

通过使用readonly属性,我们可以在构造函数中设置变量的值,并确保它在创建类的新实例时被正确地初始化。这提供了一种在运行时确定变量值的方法,而不是在编译时确定。

总结起来,如果我们想在C#类构造函数中使用常量值,我们应该使用readonly属性来代替const关键字。这样可以确保变量的值在运行时被正确地初始化,并且只能在构造函数内部或实例初始化器中进行赋值。这提供了更灵活和动态的方式来处理变量的初始化。

0
0 Comments

问题的原因是C#中的const关键字在编译时定义,而不是运行时定义。它们在运行时无法被任何代码改变,甚至包括构造函数中的代码,因为它们在运行时被它们的字面值替换。

解决方法是使用readonly字段或read-only属性。

1. readonly字段通过readonly修饰符标记:

private readonly string _username;

readonly字段只能在构造函数中直接赋值或在构造函数中赋值。编译器会强制执行这个限制,并且不允许在其他地方设置值。

2. read-only属性是根本不公开设置器的属性。在C# 6之前,您可以使用它们来返回readonly字段的值(如上所示),但是不能对它们进行赋值。然而,从C# 6开始,有一种支持只读自动属性的语法,可以进行赋值:即使没有显式的设置器,也有一个隐式的设置器,只能从构造函数或字段初始化器中调用:

public string Username { get } = "Username"

看起来可能很奇怪,你正在给一个没有设置器的属性赋值,但这只是语言的一个隐含部分 - 有一个隐含的只读的后备字段,并且可以在初始化时设置。

readonly属性从C# 1开始支持... 新版本的语法可以表达不同的只读属性。

从技术上讲,C# 6之前的属性可以是只读的,但不能是可赋值的 - 不能有可赋值的只读自动属性。可以有具有返回只读字段的getter的属性,这是正确的,但是您必须单独进行赋值。

0