.Net开发都应当掌握的泛型基础知识集合( 四 )


3. 语法:泛型委托的语法类似于普通委托,只是在定义时使用尖括号 `<T>` 来指定类型参数 。可以在委托的参数列表、返回类型等部分使用类型参数 。
4. 使用泛型委托:使用泛型委托时,可以根据需要指定具体的类型参数 。通过传递不同类型的参数给委托,可以在运行时执行相应的操作 。
public delegate T MyGenericDelegate<T>(T a, T b);MyGenericDelegate<T> 是一个泛型委托 , 使用 <T> 表示类型参数 。该委托定义了一个方法签名,接受两个类型为 T 的参数并返回类型为 T 的结果 。
我们可以使用该泛型委托来引用不同的方法,并将其作为参数传递给其他方法 。以下是一个示例:
public class MyMath{public static int Add(int a, int b){return a + b;}public static double Multiply(double a, double b){return a * b;}}public class Program{public static void Main(string[] args){MyGenericDelegate<int> intDelegate = MyMath.Add;int result1 = intDelegate(5, 10); // 调用 Add 方法Console.WriteLine(result1); // 输出:15MyGenericDelegate<double> doubleDelegate = MyMath.Multiply;double result2 = doubleDelegate(2.5, 3.5); // 调用 Multiply 方法Console.WriteLine(result2); // 输出:8.75}}在上述示例中 , 我们首先定义了一个 MyMath 类 , 其中包含了两个静态方法 Add 和 Multiply 。然后,在 Program 类中,我们创建了两个泛型委托实例 intDelegate 和 doubleDelegate , 并分别将 MyMath.Add 和 MyMath.Multiply 方法赋值给它们 。最后,我们在主方法中通过调用委托实例来间接调用了相应的方法 。
通过泛型委托,我们可以动态地引用和调用不同类型的方法,从而提高代码的灵活性和重用性 。同时 , 由于使用了类型参数,我们可以在编译时进行类型检查,避免一些潜在的运行时错误 。
泛型委托的优点包括:

  • 代码重用:可以使用泛型委托处理适用于多种参数类型的委托 , 减少冗余的委托定义 。
  • 灵活性:泛型委托允许在运行时根据需要传递不同类型的参数,并执行相应的动作 。
  • 类型安全:在编译时进行类型检查,减少运行时类型错误 。
需要注意的是 , 泛型委托的类型参数类型必须在编译时确定,不能用动态类型作为类型参数 。
6. 泛型集合
.Net开发都应当掌握的泛型基础知识集合

文章插图
 
泛型集合(Generic Collection)是.NET框架中提供的一组用于存储和操作对象的数据结构,它们是具有类型参数的集合类 。通过使用泛型集合 , 可以在编译时指定集合中元素的类型,并且可以避免在运行时进行类型转换 , 提高代码的性能和类型安全性 。下面是一些常见的泛型集合:
1. List<T>:动态数组 , 可以根据需要自动调整大小 。它提供了一系列的方法和属性来方便地操作数据 。
2. Dictionary<TKey, TValue>:键值对集合 , 存储了唯一的键和对应的值 。通过键快速查找和访问值,提供了高效的数据访问方式 。
3. Queue<T>:先进先出(FIFO)队列,添加元素到末尾 , 从头部移除元素 。适用于需要按照特定顺序处理元素的场景 。
4. Stack<T>:后进先出(LIFO)堆栈,添加元素到顶部,从顶部移除元素 。适用于需要按照特定顺序处理元素的场景 。
5. HashSet<T>:无重复元素的集合,提供了高效的添加、删除和查找操作 。它基于哈希表实现,适用于需要快速判断元素是否存在的场景 。
6. ObservableCollection<T>:可观察集合,提供了对集合变化的通知 。当集合中的元素被添加、删除或更改时,可以通过事件机制通知相关的代码 。
这些泛型集合类都位于 `
System.Collections.Generic` 命名空间下,并且可以根据需要指定相应的类型参数来适应不同的数据类型 。例如,`List<int>` 表示整数类型的动态数组 , `Dictionary<string, int>` 表示键为字符串、值为整数的键值对集合 。
using System;using System.Collections.Generic;public class Program{public static void Main(string[] args){// 创建一个泛型集合List<int> numbers = new List<int>();// 添加元素到集合numbers.Add(10);numbers.Add(20);numbers.Add(30);// 遍历集合并输出元素foreach (int number in numbers){Console.WriteLine(number);}}}我们使用 List<T> 泛型集合来存储整数类型 (int) 的元素 。首先,我们创建了一个空的集合 numbers 。然后,通过调用 Add 方法,我们向集合中逐个添加了三个整数 。最后,我们使用 foreach 循环来遍历集合 , 并将每个元素打印到控制台 。


推荐阅读