第十式:C# 常量 (金科玉律)

绝世
秘籍
冲儿,这世间有些东西是变幻莫测的(如变量),但也有一些东西是永恒不变的(如常量)。
比如“圆周率”,比如“一天有24小时”,又比如“岳不群是伪君子”(咳咳,这个不算)。
那在代码里,如何定义这些打死也不能改的东西呢?

1. const 关键字 - 刻在石碑上

使用 const 关键字定义的变量,就是常量。一旦赋值,终身不可更改。

特点:必须在定义时就赋值,且在编译期间就确定了值。


const double PI = 3.14159;
// PI = 3.14; // 错误!你想逆天改命?编译器会打断你的腿!

const string SECT_NAME = "华山派";
        

2. readonly 关键字 - 刻在木板上

还有一种叫 readonly(只读)。它比 const 稍微灵活一点点。

特点:可以在定义时赋值,也可以在构造函数(Constructor)里赋值。但出了构造函数,就不能改了。


class Hero
{
    public readonly int BirthYear; // 出生年份

    public Hero(int year)
    {
        BirthYear = year; // 这里是唯一可以修改它的机会!
    }

    public void GrowUp()
    {
        // BirthYear = 2000; // 错误!木板已经干了,改不了了。
    }
}
        
记住!const 是用来定义那些宇宙真理的(如数学常数)。
readonly 是用来定义那些出生后就不变的属性(如身份证号)。
还有,常量名通常全大写(如 MAX_VALUE),这是为了警示后人:只可远观,不可亵玩!
🗿

动手时刻:定海神针

尝试编写一段代码:

  1. 定义一个常量 const int MAX_LEVEL = 100;
  2. 试着在下一行修改它:MAX_LEVEL = 99;
  3. 看看岳不群(编译器)会给你什么脸色?
查看下场

编译器会抛出错误:

Error CS0131: The left-hand side of an assignment must be a variable, property or indexer

意思是:“赋值号左边必须是个变量,你给我个常量(石头)是想让我刻字吗?”


成就解锁:【守门人】 获得:不可变护符