静态类 public static class注意事项
- 静态类 = 工具集:
- 开发者看到 static class 立刻明白它是无状态的工具容器(如 Math、File),无需实例化、不保存数据
- 扩展方法的唯一容器
- 扩展方法必须定义在静态类中:
public static class StringExtensions
{
public static bool IsNumeric(this string str) // ✅ 合法
{
return double.TryParse(str, out _);
}
}
- 若定义在普通类中
public class InvalidExtensions
{
public static bool IsNumeric(this string str) // ❌ 编译错误
{
return double.TryParse(str, out _);
}
}
// 树形结构节点类
private class DepartmentNode
{
public int Id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
// 属性初始化器:在创建对象时自动初始化属性
// Children是DepartmentNode类型的空List
public List<DepartmentNode> Children { get; set; } = new List<DepartmentNode>();
}
public DepartmentNode()
{
Children = new List<DepartmentNode>();
}
泛型类补充说明
......
namespace ConsoleApp2
{
internal class Program
{
static void Main(string[] args)
{
// 放入int类型
CustomBox<int> intBox = new CustomBox<int>();
intBox.Put(123);
var res = intBox.Get();
Console.WriteLine($"该T类型的返回值为: {res}");
// 放入string类型
CustomBox<string> stringBox = new CustomBox<string>();
stringBox.Put("Hello World!");
var res2 = stringBox.Get();
Console.WriteLine($"该T类型的返回值为: {res2}");
}
}
// 定义泛型类
class CustomBox<T>
{
private T content; # 定义泛型属性
public void Put(T item) # 为泛型属性赋值
{
content = item;
Console.WriteLine($"content值为: {item}");
}
public T Get() # 获取泛型属性值
{
return content;
}
}
}
- 类型安全: 这是泛型的核心优势。一旦你用 CustomBox<int> 创建了一个盒子,编译器就知道并且保证这个盒子只能放 int。如果你尝试 intBox.Put("Hello"),编译器会立即报错。同样,Get() 拿出来的直接就是 int,不需要你手动进行可能出错或低效的类型转换((int)intBox.Get())
- 代码重用: 虽然生成了逻辑上不同的类型 (MyBox<int> 和 MyBox<string> 是完全不同的类型),但你只需要写一次 MyBox<T> 的代码。编译器或运行时会根据不同的 T 为你生成处理特定类型的专用版本(或共享优化版本)。避免了为每种数据类型(int, string, Customer)都手工写一个几乎完全一样的 IntBox, StringBox, CustomerBox 类
- 性能: 对于值类型(如 int, double, struct),泛型避免了装箱(Boxing)和拆箱(Unboxing)的开销。在 MyBox<int> 中,int 直接存储,效率很高。如果用一个 object 类型的盒子(非泛型)来放 int,就需要装箱(把 int 包装成 object),取出来时需要拆箱(把 object 转回 int),这会影响性能
Python类比: Python 本身就是一个万能盒子(动态类型)
class Box:
def __init__(self, content):
self.content = content # 可以放任何类型
int_box = Box(42) # 放整数
str_box = Box("hello") # 放字符串
list_box = Box([1, 2, 3]) # 放列表