C# 学习笔记 15:跨越个体的共享记忆 —— 静态成员(Static)
开篇:皮皮的“计数”大翻车
皮皮(Pipi)想统计:
今天的史莱姆工厂,一共生产了多少只史莱姆?
于是他这样写:
publicclassSlime
{
// 皮皮的“天才设计”
publicint Count = 0;
publicSlime()
{
Count++;
Console.WriteLine($"我是第 {Count} 只史莱姆!");
}
}
开始生产:
Slime s1 = new Slime(); // 我是第 1 只史莱姆!
Slime s2 = new Slime(); // 我是第 1 只史莱姆!
Slime s3 = new Slime(); // 我是第 1 只史莱姆!
皮皮当场石化:
“???你们怎么全是老大???”

瓜瓜真相时间:
你这个 Count —— 不是工厂计数器
而是:
每只史莱姆出生时
👉 自带的一个私人记事本
每个人都记:
“我出生了 = 1”
它们根本没有共享信息。
第一关:属于“类”的数据(Static Variable)
如果你想要的是:
所有对象共享的一份数据
那它就不应该属于对象,而应该属于:
👉 类本身
publicclassSlime
{
publicstaticint TotalCount = 0;
publicSlime()
{
TotalCount++;
Console.WriteLine($"史莱姆诞生!当前总数为:{TotalCount}");
}
}
运行:
new Slime(); // 1
new Slime(); // 2
new Slime(); // 3
📌 核心认知(非常重要):
Static = 类级别内存
⚠️ Static 的访问方式(必考点)
既然它属于类,就必须用类访问:
Console.WriteLine(Slime.TotalCount);
而不是:
Slime s = new Slime();
// s.TotalCount ❌ 编译报错
👉 你不是在问某只史莱姆
👉 你是在问整个“物种”
第二关:不需要实体的行为(Static Method)
有些功能:
根本不依赖任何对象存在
比如数学计算:
int max = Math.Max(100, 50);
你从来没写过:
Math m = new Math(); // ❌
因为:
👉 这个行为属于“概念”,不属于“个体”
皮皮也写了一个史莱姆广播:
publicclassSlime
{
publicstaticint TotalCount = 0;
publicstring Name;
publicstaticvoidAnnounce()
{
Console.WriteLine($"当前共有 {TotalCount} 只史莱姆");
// Console.WriteLine(Name); ❌ 报错!
}
}
🚨 Static Method 铁律:
静态方法不能访问实例成员
为什么?
因为:
静态方法存在时
可能根本还没有任何对象被创建!
你对着全族广播说:
“我的名字是 Name”
系统会问你:
“你是谁???”

第三关:纯工具类(Static Class)
如果一个类:
那它本质上就是一个:
🧰 工具箱
publicstaticclassGameUtils
{
publicstaticvoidPrintLogo()
{
Console.WriteLine("=== 皮皮大冒险 ===");
}
}
GameUtils.PrintLogo(); // ✅
// new GameUtils(); ❌ 编译直接阻止你
Static Class = 禁止被 new 的类
第四关:Static 的黑暗面(全局状态警告 ⚠️)
皮皮兴奋地说:
“那我以后全用 static!”
瓜瓜当场打断:
“那你准备好调试地狱了吗?”
Static 滥用的两个后果:
永久占用内存
Static 生命周期 = 程序生命周期
GC 不会回收它。
全局状态污染(最可怕)
A 改了:
GameConfig.Damage = 999;
B 读的时候:
Console.WriteLine(GameConfig.Damage); // WTF??
Bug 开始:
这就是全局变量噩梦
Static 使用黄金法则:
只在以下场景使用:
✔ 全局唯一配置
✔ 工具函数(Math)
✔ 共享计数器
✔ 单例管理器
总结
课后思考
我们写了无数次:
Console.WriteLine();
请问:
⏭️ 下期预告:枚举(Enum)
皮皮的代码开始出现:
int state = 1; // 站立
int state = 2; // 跑
int state = 3; // 死
一周后他看着代码:
“这个 3 是跳跃还是死亡来着?”
下一期我们学习:
👉 Enum —— 消灭魔法数字的终极武器