C# 面试题 目录

C# 中 const 和 readonly 的区别

推荐答案

在C#中,constreadonly都用于定义不可变的变量,但它们有以下主要区别:

  1. 初始化时机

    • const:必须在声明时初始化,且只能使用编译时常量表达式。
    • readonly:可以在声明时初始化,也可以在构造函数中初始化。
  2. 作用范围

    • const:默认是静态的,属于类级别,不能与static关键字一起使用。
    • readonly:可以是实例级别或静态级别,可以与static关键字一起使用。
  3. 内存分配

    • const:在编译时被替换为常量值,不占用实例内存。
    • readonly:在运行时分配内存,占用实例内存。
  4. 适用场景

    • const:适用于定义不会改变的常量值,如数学常数。
    • readonly:适用于在运行时才能确定的值,如配置文件中的值。

本题详细解读

1. 初始化时机

const变量必须在声明时初始化,并且只能使用编译时常量表达式。这意味着const的值在编译时就已经确定,并且在程序运行期间不能更改。

readonly变量可以在声明时初始化,也可以在构造函数中初始化。这使得readonly变量可以在运行时根据条件进行初始化。

-- -------------------- ---- -------
------ ----- -------
-
    ------ -------- --- -----------

    ------ ----------- ------
    -
        ---------- - ------ -- --------------
    -
-

2. 作用范围

const变量默认是静态的,属于类级别,不能与static关键字一起使用。这意味着const变量在整个应用程序中只有一个实例。

readonly变量可以是实例级别或静态级别,可以与static关键字一起使用。这意味着readonly变量可以是每个实例独有的,也可以是整个类共享的。

3. 内存分配

const变量在编译时被替换为常量值,不占用实例内存。这意味着const变量的值直接嵌入到使用它的代码中,不会在运行时分配内存。

readonly变量在运行时分配内存,占用实例内存。这意味着readonly变量的值在运行时确定,并且存储在实例的内存中。

4. 适用场景

const适用于定义不会改变的常量值,如数学常数。由于const的值在编译时确定,因此它适用于那些在程序运行期间不会发生变化的值。

readonly适用于在运行时才能确定的值,如配置文件中的值。由于readonly的值可以在运行时确定,因此它适用于那些在程序运行期间可能会发生变化的值。

-- -------------------- ---- -------
------ ----- ------
-
    ------ -------- ------ -----------------

    ------ --------
    -
        ---------------- - ----------------------------------------------------- -- --------
    -
-
纠错
反馈