Files

69 lines
1.6 KiB
Markdown
Raw Permalink Normal View History

2026-06-21 09:51:55 +08:00
# 静态成员
2026-06-18 20:01:30 +08:00
概念:
2026-06-21 09:51:55 +08:00
-`static` 修饰的成员叫静态成员
- 静态成员属于==类型本身==,不属于某个具体对象
- 常见的静态成员有:静态字段、静态方法、静态属性、静态事件
2026-06-18 20:01:30 +08:00
特点:
2026-06-21 09:51:55 +08:00
- 一般通过==类名.成员名==访问
- 同一类型的所有对象共享同一份静态数据
2026-06-18 20:01:30 +08:00
通常用法:
2026-06-21 09:51:55 +08:00
- 记录全局共享状态
- 写工具方法
- 定义不会因对象不同而变化的数据
2026-06-18 20:01:30 +08:00
案例:
2026-06-21 09:51:55 +08:00
```csharp
class Player
2026-06-18 20:01:30 +08:00
{
2026-06-21 09:51:55 +08:00
public static int Count;
public string Name;
public Player(string name)
2026-06-18 20:01:30 +08:00
{
2026-06-21 09:51:55 +08:00
Name = name;
Count++;
2026-06-18 20:01:30 +08:00
}
2026-06-21 09:51:55 +08:00
public static void PrintCount()
2026-06-18 20:01:30 +08:00
{
2026-06-21 09:51:55 +08:00
Console.WriteLine(Count);
2026-06-18 20:01:30 +08:00
}
}
2026-06-21 09:51:55 +08:00
Player p1 = new Player("A");
Player p2 = new Player("B");
Player.PrintCount(); // 2
2026-06-18 20:01:30 +08:00
```
注意:
2026-06-21 09:51:55 +08:00
1. ==静态成员属于类,不属于对象==
2. 静态方法里不能直接访问实例成员,因为它没有 `this`
3. 实例方法里可以访问静态成员
4. 静态字段通常会随着类型存在而存在;在大多数日常程序里,可以近似理解为“程序结束前一直都在”
5. 静态成员不是“永远不释放”的绝对规则,别把它和 GC 机制混为一谈
[[常量|const]] 和 `static readonly`
共同点:
- 都常用来表示“不希望随便改”的值
区别:
1. `const`
- 必须声明时初始化
- 编译期常量
- 隐式就是静态语义
2. `static readonly`
- 可以声明时赋值,也可以在静态构造函数中赋值
- 运行期确定
- 更适合保存复杂初始化结果
例子:
```csharp
class MathInfo
{
public const float Pi = 3.1415926f;
public static readonly DateTime StartTime = DateTime.Now;
}
```