Files
My-Notes/笔记/CSharp/核心/静态类和静态构造函数.md
T

81 lines
1.5 KiB
Markdown
Raw Normal View History

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. 如果只是简单赋值,优先考虑直接写静态字段初始化器,通常更直观