C#教程补充解释说明

  • 静态类 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])   # 放列表
posted @ 2025-07-03 16:21  清安宁  阅读(8)  评论(0)    收藏  举报