常量和只读在C#中?

可能重复:
const和readonly有什么区别?

我有疑问在C#有什么区别在常量和只读解释与简单的问题或任何参考。


const在编译时被初始化,并且不能被改变。

readonly在运行时初始化,但只能执行一次(在构造函数或内联声明中)。


const是一个编译时常量:您编写的值会插入代码中。 这意味着您只能拥有编译器可以理解的常量值类型,例如整数和字符串。 与readonly不同,您不能将函数的结果分配给const字段,例如:

class Foo {
  int makeSix() { return 2 * 3; }
  const int const_six = makeSix(); // <--- does not compile: not initialised to a constant
  readonly int readonly_six = makeSix(); // compiles fine
}

另一方面, readonly字段在运行时初始化,并且可以具有任何类型和值。 readonly标签意味着该字段一旦被设置就永远不会被重新分配。

但是,请注意:只读集合或对象字段仍然可以更改其内容,而不是所设置的集合的标识。 这是完全有效的:

class Foo {
  readonly List<string> canStillAddStrings = new List<string>();

  void AddString(string toAdd) {
    canStillAddStrings.Add(toAdd);
  }
}

但在这种情况下我们将无法替换参考:

class Foo {
  readonly List<string> canStillAddStrings = new List<string>();

  void SetStrings(List<string> newList) {
    canStillAddStrings = newList; // <--- does not compile, assignment to readonly field
  }
}

常量( const )必须在编译时已知。

readonly字段可以在运行时使用已知值进行初始化(并且仅初始化)。

链接地址: http://www.djcxy.com/p/21215.html

上一篇: constant and readonly in c#?

下一篇: const vs. static readonly