CodeGym /课程 /C# SELF /常量和关键字 var

常量和关键字 var

C# SELF
第 10 级 , 课程 1
可用

1. 常量

常量 —— 就是那种“魔法”变量,值一旦声明就不能(也没必要!)再改了。想象一下你杯子上贴了个超粘的标签写着“只喝茶”。贴上这标签你就不能再把茶换成咖啡了(至少在C#里是这样)。


const int DaysInWeek = 7;
const string HelloMessage = "欢迎!";
常量声明

在这些例子里,DaysInWeek永远都是7HelloMessage也一直是欢迎语。一旦常量的值定了,就不能再改。

常量有什么用?

  • 代码更清晰:你看到const double Pi = 3.14159;,就知道这是个常量,不会被谁在程序里改掉。
  • 安全:没人(包括你自己几个月后)能不小心把常量的值改了。
  • 性能:C#编译器会直接把常量值插到用的地方,程序会快一点点。

声明语法


const 类型 名字 = ;
常量声明语法
  • 类型 —— 任何基础类型(intdoublestringchar,还有枚举和字面量)。
  • 名字 —— 通常用CamelCasePascalCase风格。有些“魔法”常量会全大写加下划线(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
类型很明确
int age = 42;
var age = 42;
方法返回复杂类型
Dictionary<int, string> dict = SomeFunc();
var dict = SomeFunc();
数组
string[] names = ...
var names = ...
建议:

现在项目里,局部变量基本都用var。参数、属性、常量——还是写明类型。

3. 小坑和建议

C#里经常有人直接在代码里写魔法数字("7""3.14159""0.15"还有各种神秘数字)。这样不好:要是值变了,你得全项目搜一遍。用常量吧!自己省事,队友也不会骂你...

var也有另一个极端:如果你全代码都是var,但谁都看不出变量类型——代码很快就没人能看懂。所以var要用在合适、上下文一看就明白的地方,其他时候别怕写明类型。

2
任务
C# SELF, 第 10 级, 课程 1
已锁定
声明和使用常量
声明和使用常量
2
任务
C# SELF, 第 10 级, 课程 1
已锁定
使用 var 关键字
使用 var 关键字
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION