不能更改但需要在构造函数中初始化的c#变量

本文关键字:初始化 变量 构造函数 不能 | 更新日期: 2023-09-27 18:14:35

我需要一个在构造函数中初始化后不能更改的属性

像这样:

private const string banknr;
public ClassName(string banknr)
{
    this.banknr = banknr;
    //from now on "banknr" can't be changed something like a final or const
}

但是它就是不工作,我真的不明白

不能更改但需要在构造函数中初始化的c#变量

这正是readonly关键字所做的。

private readonly string banknr;
public ClassName(string banknr)
{
    this.banknr = banknr;
    //from now on "banknr" can't be changed something like a final or const
}

只读变量可以在构造函数中设置,但不能更改。

如果您希望初始化后的值不能被触摸,您可以使用readonly关键字:

public class Class2
{
    public readonly string MyProperty;
    public Class2()
    {
        MyProperty = "value";
    }
}

readonly (c# Reference):

只能在以下情况下为只读字段赋值背景:

  • 当变量在声明中初始化时。
  • 对于实例字段,在包含字段声明的类的实例构造函数中;对于静态字段,在包含字段声明的类的静态构造函数。这也是唯一可以有效传递a的上下文中readonly字段作为out或ref参数。

如果你想要的值不能被移出你的类,你可以在属性中使用私有setter:

public class Class1
{
    public string MyProperty { get; private set; }
    public Class1()
    {
        MyProperty = "value";
    }
}

你想要readonly而不是const。不同之处可以在http://weblogs.asp.net/psteele/63416上找到。摘要:

  • const:只在声明
  • 时初始化
  • readonly:可以在声明或构造函数中初始化