1. 常量
常量 —— 就是那种“魔法”变量,值一旦声明就不能(也没必要!)再改了。想象一下你杯子上贴了个超粘的标签写着“只喝茶”。贴上这标签你就不能再把茶换成咖啡了(至少在C#里是这样)。
const int DaysInWeek = 7;
const string HelloMessage = "欢迎!";
常量声明
在这些例子里,DaysInWeek永远都是7,HelloMessage也一直是欢迎语。一旦常量的值定了,就不能再改。
常量有什么用?
- 代码更清晰:你看到const double Pi = 3.14159;,就知道这是个常量,不会被谁在程序里改掉。
- 安全:没人(包括你自己几个月后)能不小心把常量的值改了。
- 性能:C#编译器会直接把常量值插到用的地方,程序会快一点点。
声明语法
const 类型 名字 = 值;
常量声明语法
- 类型 —— 任何基础类型(int、double、string、char,还有枚举和字面量)。
- 名字 —— 通常用CamelCase或PascalCase风格。有些“魔法”常量会全大写加下划线(DAYS_IN_WEEK),但C#里没硬性要求。
举几个例子:
const double GRAVITY = 9.81; // 重力加速度,m/s^2
const char DELIMITER = ',';
const string DEVELOPER_NAME = "伊万·彼得罗夫";
常量的特点和限制
- 值必须在编译时就知道。意思是不能声明一个值要等程序运行时才能算出来的常量。
const int NowYear = DateTime.Now.Year; // 编译错误!
- 只能用简单类型、string或枚举。
- 不能把数组、对象、方法返回值啥的声明成常量。
- 就算数学上看着“简单”的表达式,也得编译器能算出来,不能等程序跑起来再算。
比如这样不行:
const string FullGreeting = "你好, " + userName; // userName 是变量,这样不行!
这样就可以:
const string DefaultGreeting = "你好, 用户!";
常量一般放哪?
- 类(或文件)开头,方法上面。
- 专门放常量的类(比如public static class Constants)。
- 类里,如果常量只跟这个类有关。
给你个控制台程序的例子:
class Program
{
const string Welcome = "欢迎来到我们的应用!";
static void Main(string[] args)
{
Console.WriteLine(Welcome);
}
}
常量和作用域
常量的作用域跟普通变量一样:只在声明它的范围内能看到。
2. 关键字 var
关键字var——不是新类型,只是让编译器自己根据上下文推断变量类型的方便写法。
这就是语法糖——没啥魔法,编译后变量还是普通类型。
var age = 23; // 编译器知道:age 是 int
var name = "安娜"; // 编译器知道:string
var price = 99.99; // 编译器知道:double
用
var自动推断类型
为啥有了var?
- 可读性:不用手写很长的类型(比如Dictionary<string, List<int>>)。
- 灵活:以后类型变了,只要右边改,左边var自动适配。
- 现代风格:现在C#项目基本都用var,只要类型一眼能看出来。
啥时候可以(应该)用var
- 右边一看就知道变量类型。
- 类型很明显(var price = 100;——一看就是int)。
- 类型太长太复杂(比如LINQ查询结果)。
var numbers = new int[] { 1, 2, 3, 4 };
var input = Console.ReadLine(); // input 是 string(方法返回string)
啥时候最好别用var
如果右边看不出类型,代码就不清楚了。要是你一个月后和同事都看不懂这变量啥类型,还是写明白点吧。
var mystery = DoSomethingVeryComplicated(); // 你是谁,mystery???
这里最好写明类型:
string result = DoSomethingVeryComplicated();
金科玉律:只有不影响可读性的时候才用var!
var——只给局部变量用
关键字var只能用在方法里的局部变量。不能用在:
- 方法参数;
- 类属性;
- 常量。
var底层怎么搞的
- C#编译器编译时会自动替换成正确类型。
- 编译后就没var了。
- 性能没损失:只是写代码方便点。
var year = 2025; // 编译时变成:int year = 2025;
用var常见错误
- 变量没初始化:
var a; // 错误:编译器不知道类型!
- 初始化不明确:
var list = null; // 错误:null类型不明确!
- 同一个变量混用不同类型:
var value = 5; // value 是 int
value = "五"; // 错误:value已经是int了!
对比:显式类型和var
| 场景 | 显式类型 | var |
|---|---|---|
| 类型很明确 | |
|
| 方法返回复杂类型 | |
|
| 数组 | |
|
建议:
现在项目里,局部变量基本都用var。参数、属性、常量——还是写明类型。
3. 小坑和建议
C#里经常有人直接在代码里写魔法数字("7"、"3.14159"、"0.15"还有各种神秘数字)。这样不好:要是值变了,你得全项目搜一遍。用常量吧!自己省事,队友也不会骂你...
var也有另一个极端:如果你全代码都是var,但谁都看不出变量类型——代码很快就没人能看懂。所以var要用在合适、上下文一看就明白的地方,其他时候别怕写明类型。
GO TO FULL VERSION