返回

大厂打工人必备技巧之巧用 readonly 与 const

后端

在 C# 中,我们经常会用到常量来保持程序的健壮性。常量可以确保数据的可靠性,并且可以提高代码的可读性和可维护性。但是,你是否知道 C# 中有两种类型的常量:编译期常量和运行期常量呢?他们有什么区别呢?如何恰当地使用它们呢?今天,我们就来揭开这两个常量的庐山真面目,看看高手是如何使用 readonly 与 const 这两个利器的。


编译期常量:不变的真相

编译期常量,顾名思义,就是在编译时就确定其值。一旦定义,便不可更改。编译期常量的特点是:

  • 由 const 修饰。
  • 可以是基本类型(int、double、char、bool等)或字符串类型。
  • 不能使用运算符或函数来定义值。
  • 必须在定义时就赋予初始值。
  • 一旦定义,便不可更改。

编译期常量通常用于表示不会改变的值,例如:

const double PI = 3.141592653589793;
const string COMPANY_NAME = "Google";
const int MAX_SIZE = 100;

运行期常量:动态的可能

与编译期常量不同,运行期常量可以在程序运行时改变其值。但是,运行期常量的值在程序运行期间不能改变。运行期常量具有以下特点:

  • 由关键字 readonly 修饰。
  • 可以是任何类型。
  • 可以使用运算符或函数来定义值。
  • 可以定义一个初始值,但也可以不定义初始值。
  • 一旦定义,可以在程序运行期间更改其值,但只能更改一次。

运行期常量通常用于表示可能会改变的值,例如:

readonly string name = "John Doe"; // 只能在构造函数中赋值
readonly List<int> numbers = new List<int>(); // 可以多次添加或删除元素

// 也可以在构造函数之外为运行期常量赋值
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);

何时使用 readonly 与 const

那么,我们该如何决定使用 readonly 还是 const 呢?以下是一些指导原则:

  • 如果一个值在程序运行期间永远不会改变,则应使用 const。例如,PI 的值永远不会改变,因此可以使用 const 关键字来定义它。
  • 如果一个值在程序运行期间可能改变,但只能改变一次,则应使用 readonly。例如,一个人的名字在程序运行期间可能改变(例如,结婚后改名),但只能改变一次,因此可以使用 readonly 关键字来定义它。
  • 如果一个值在程序运行期间可能改变多次,则不应使用 const 或 readonly。例如,一个列表中的元素可以多次添加或删除,因此不应使用 const 或 readonly 关键字来定义它。

readonly 与 const 的收益

使用 readonly 与 const 有许多好处,包括:

  • 提高代码的可读性和可维护性。 通过使用 const 和 readonly,您可以清楚地表明变量的值不能被更改,从而提高代码的可读性和可维护性。
  • 防止意外修改数据。 通过使用 const 和 readonly,您可以防止意外修改数据,从而提高程序的健壮性和可靠性。
  • 提高性能。 在某些情况下,使用 const 和 readonly 可以提高程序的性能。例如,编译器可以对编译期常量进行优化,从而提高程序的运行速度。

总结

好了,今天我们学习了 C# 中的两种常量:编译期常量和运行期常量。我们还学习了如何使用这些常量来提高代码的可读性、可维护性和性能。希望大家能够活用这些知识,写出更加健壮、可靠、高效的代码。