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
|
|
|
```csharp
|
|
|
|
|
public static class MathTool
|
|
|
|
|
{
|
|
|
|
|
public static int Add(int a, int b)
|
|
|
|
|
{
|
|
|
|
|
return a + b;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
2026-06-18 20:01:30 +08:00
|
|
|
|
|
|
|
|
注意:
|
2026-06-21 09:51:55 +08:00
|
|
|
1. 静态类不能 `new`
|
|
|
|
|
2. 静态类不能包含实例成员
|
|
|
|
|
3. 静态类本质上也不能被继承,常可以理解为“天然密封”
|
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
|
|
|
- 初始化复杂的静态字段
|
|
|
|
|
- 做一次性的类型级初始化
|
2026-06-18 20:01:30 +08:00
|
|
|
|
|
|
|
|
语法:
|
2026-06-21 09:51:55 +08:00
|
|
|
```csharp
|
|
|
|
|
class Test
|
2026-06-18 20:01:30 +08:00
|
|
|
{
|
2026-06-21 09:51:55 +08:00
|
|
|
static Test()
|
2026-06-18 20:01:30 +08:00
|
|
|
{
|
|
|
|
|
Console.WriteLine("静态构造函数");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
2026-06-21 09:51:55 +08:00
|
|
|
|
|
|
|
|
案例:
|
|
|
|
|
```csharp
|
2026-06-18 20:01:30 +08:00
|
|
|
class Test
|
|
|
|
|
{
|
2026-06-21 09:51:55 +08:00
|
|
|
public static int Count;
|
|
|
|
|
|
2026-06-18 20:01:30 +08:00
|
|
|
static Test()
|
|
|
|
|
{
|
2026-06-21 09:51:55 +08:00
|
|
|
Count = 100;
|
|
|
|
|
Console.WriteLine("执行静态构造函数");
|
2026-06-18 20:01:30 +08:00
|
|
|
}
|
2026-06-21 09:51:55 +08:00
|
|
|
|
2026-06-18 20:01:30 +08:00
|
|
|
public Test()
|
|
|
|
|
{
|
2026-06-21 09:51:55 +08:00
|
|
|
Console.WriteLine("执行普通构造函数");
|
2026-06-18 20:01:30 +08:00
|
|
|
}
|
|
|
|
|
}
|
2026-06-21 09:51:55 +08:00
|
|
|
|
|
|
|
|
Console.WriteLine(Test.Count);
|
|
|
|
|
var t = new Test();
|
2026-06-18 20:01:30 +08:00
|
|
|
```
|
2026-06-21 09:51:55 +08:00
|
|
|
|
|
|
|
|
执行理解:
|
|
|
|
|
- 第一次访问 `Test.Count` 时,会先执行静态构造函数
|
|
|
|
|
- 之后再创建对象时,不会重复执行静态构造函数
|
|
|
|
|
|
2026-06-18 20:01:30 +08:00
|
|
|
注意:
|
2026-06-21 09:51:55 +08:00
|
|
|
1. ==类和结构体都可以有静态构造函数==
|
|
|
|
|
2. ==静态构造函数不能写访问修饰符==
|
|
|
|
|
3. ==静态构造函数不能有参数==
|
|
|
|
|
4. 一个类型最多只有一个静态构造函数
|
|
|
|
|
5. 静态构造函数只会自动执行一次
|
|
|
|
|
6. 如果只是简单赋值,优先考虑直接写静态字段初始化器,通常更直观
|