C# 2.0 是 2005 年 随 .NET Framework 2.0 发布的,带来了许多重要的新特性,增强了语言的表达能力、类型安全性和开发效率。
C# 2.0 主要新增特性
1. 泛型(Generics) 🚀
C# 2.0 引入了 泛型,提供了更高的类型安全性、可重用性和性能,避免了不必要的装箱/拆箱,提高代码的可维护性。
示例(泛型类):
public class Box<T> { public T Value { get; set; } } Box<int> intBox = new Box<int> { Value = 10 }; Box<string> strBox = new Box<string> { Value = "Hello" }; Console.WriteLine(intBox.Value); // 输出: 10 Console.WriteLine(strBox.Value); // 输出: Hello
示例(泛型方法):
public T GetMax<T>(T a, T b) where T : IComparable<T> { return a.CompareTo(b) > 0 ? a : b; } Console.WriteLine(GetMax(10, 20)); // 输出: 20
主要优点:
- 类型安全(避免
object类型的强制转换) - 性能提升(减少装箱/拆箱)
- 代码复用性更高
2. 空类型(Nullable Types)
C# 2.0 引入了对值类型(int、double 等)可为空的支持,增加了 Nullable<T> 结构或使用 ? 语法。
示例:
int? number = null; if (number.HasValue) { Console.WriteLine(number.Value); } else { Console.WriteLine("number is null"); }
常用方法:
HasValue– 检查是否有值GetValueOrDefault()– 返回默认值(如0)
好处: 在数据库操作、表单输入等需要处理缺失值的场景非常有用。
3. 匿名方法(Anonymous Methods)
C# 2.0 引入了匿名方法,允许直接在委托声明时定义方法,减少了额外的方法定义,简化了事件和回调代码。
示例:
delegate void GreetDelegate(string message); GreetDelegate greet = delegate (string msg) { Console.WriteLine("Hello, " + msg); }; greet("World"); // 输出: Hello, World
好处:
- 代码更简洁,尤其在事件处理和 LINQ 查询中非常有用。
- 适用于小型临时操作,无需额外定义方法。
4. 迭代器(Iterators)
C# 2.0 引入 yield return 语法,使得自定义集合的遍历变得更容易,能够延迟执行并逐步生成数据。
示例:
public static IEnumerable<int> GetNumbers() { yield return 1; yield return 2; yield return 3; } foreach (var num in GetNumbers()) { Console.WriteLine(num); }
好处:
- 节省内存(按需生成数据)
- 简化复杂的迭代逻辑
5. 部分类(Partial Classes)
C# 2.0 允许将一个类的定义拆分为多个文件,这在大型项目、自动生成代码(如 Windows Forms、Web Services)时非常有用。
示例:
// File: Person1.cs public partial class Person { public string FirstName { get; set; } } // File: Person2.cs public partial class Person { public string LastName { get; set; } }
好处:
- 便于团队协作(多人可同时编辑同一类)
- 将自动生成的代码和手动代码分离,防止修改冲突
6. 静态类(Static Classes)
C# 2.0 引入了静态类,用来表示仅包含静态成员的类型,禁止实例化。
示例:
public static class MathHelper { public static int Add(int a, int b) => a + b; } Console.WriteLine(MathHelper.Add(5, 3)); // 输出: 8
特点:
- 不能实例化或继承静态类
- 适合工具类、帮助函数、全局常量
7. 协变和逆变(Covariance and Contravariance)
C# 2.0 引入了泛型委托的协变和逆变,使得返回类型和参数类型更灵活。
示例:
public delegate T Factory<out T>(); // 协变 public delegate void Processor<in T>(T item); // 逆变
协变(out):允许返回值类型从子类到父类转换。
逆变(in):允许参数类型从父类到子类转换。
8. 默认值参数(Default Value for Generics)
在 C# 2.0 中,default 关键字允许为泛型类型提供默认值,使泛型代码更加灵活。
示例:
public T GetDefault<T>() { return default(T); } Console.WriteLine(GetDefault<int>()); // 输出: 0 Console.WriteLine(GetDefault<string>() == null); // 输出: True
作用:
- 对于值类型返回
0,对于引用类型返回null
9. 提升的 get 和 set 访问器支持
C# 2.0 允许在属性的 get 和 set 中直接操作不同作用域的访问权限。
示例:
public class Product { public string Name { get; private set; } public decimal Price { get; internal set; } }
10. 命名空间别名的改进
C# 2.0 提供更灵活的命名空间别名功能,简化长命名空间的使用。
示例:
using Util = System.Collections.Generic; Util.List<int> numbers = new Util.List<int>();
C# 2.0 新特性的总结
| 特性 | 描述 |
|---|---|
| 泛型(Generics) | 提供类型安全的集合和方法 |
| 可空类型(Nullable) | 允许值类型存储 null |
| 匿名方法 | 允许定义内联函数,减少代码冗余 |
| 迭代器 | 使用 yield return 简化遍历 |
| 部分类 | 允许类的多个定义,支持自动代码生成 |
| 静态类 | 用于工具函数,不允许实例化 |
| 泛型委托协变逆变 | 更灵活的泛型类型参数转换 |
默认值 default |
泛型的默认值处理 |
C# 2.0 主要关注于代码的类型安全性、简洁性和可维护性,尤其是泛型的引入,大大提升了集合、方法的通用性,是 C# 语言发展史上的一次重大升级。
个人收集,来源来网络。
浙公网安备 33010602011771号