淡若轻风

博客园 首页 新随笔 联系 订阅 管理

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 引入了对值类型intdouble 等)可为空的支持,增加了 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. 提升的 getset 访问器支持

C# 2.0 允许在属性的 getset 中直接操作不同作用域的访问权限。

示例:

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# 语言发展史上的一次重大升级。

个人收集,来源来网络。

posted on 2025-01-24 01:31  淡若轻风  阅读(56)  评论(0)    收藏  举报