差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
| csharp:类:嵌套类 [2025/11/27 10:19] – 张叶安 | csharp:类:嵌套类 [2025/11/27 10:21] (当前版本) – [1. 内部类需要被多处复用] 张叶安 | ||
|---|---|---|---|
| 行 3: | 行 3: | ||
| 嵌套类(Nested Class)是在另一个类内部声明的类。在 C# 中,嵌套类与外部类的关系主要是**访问控制**的关系,而不是对象实例的关系。 | 嵌套类(Nested Class)是在另一个类内部声明的类。在 C# 中,嵌套类与外部类的关系主要是**访问控制**的关系,而不是对象实例的关系。 | ||
| - | <note important> | + | |
| **C# 与 Java 的区别**: | **C# 与 Java 的区别**: | ||
| 在 C# 中,嵌套类默认**不会**自动持有外部类实例的引用(类似于 Java 的 static inner class)。如果需要访问外部类的非静态成员,必须显式传递外部类的实例。 | 在 C# 中,嵌套类默认**不会**自动持有外部类实例的引用(类似于 Java 的 static inner class)。如果需要访问外部类的非静态成员,必须显式传递外部类的实例。 | ||
| - | </ | ||
| ===== 一、什么时候应该用嵌套类 (最佳实践) ===== | ===== 一、什么时候应该用嵌套类 (最佳实践) ===== | ||
| 行 144: | 行 143: | ||
| </ | </ | ||
| - | <note warning> | + | |
| **后果**:其他类如果要用这个工具,必须写成 `Order.MathUtils.Add(...)`,这不仅啰嗦,而且让人困惑:为什么做加法运算需要依赖 `Order` 类? | **后果**:其他类如果要用这个工具,必须写成 `Order.MathUtils.Add(...)`,这不仅啰嗦,而且让人困惑:为什么做加法运算需要依赖 `Order` 类? | ||
| - | </ | + | |
| ==== 2. 生命周期管理风险 (内存泄漏) ==== | ==== 2. 生命周期管理风险 (内存泄漏) ==== | ||