泛型委托(C# 编程指南)
2013-12-07 17:27
316 查看
Visual Studio 2013
其他版本
此主题尚未评级 - 评价此主题
委托 可以定义自己的类型参数。 引用泛型委托的代码可以指定类型参数以创建已关闭的构造类型,就像实例化泛型类或调用泛型方法一样,如下例所示:
C#
C# 2.0 版具有称为方法组转换的新功能,此功能适用于具体委托类型和泛型委托类型,并使您可以使用如下简化的语法写入上一行:
C#
在泛型类内部定义的委托使用泛型类类型参数的方式可以与类方法所使用的方式相同。
C#
引用委托的代码必须指定包含类的类型变量,如下所示:
C#
根据典型设计模式定义事件时,泛型委托尤其有用,因为发送方参数可以为强类型,不再需要强制转换成 Object,或反向强制转换。
C#
请参见
泛型介绍(C# 编程指南)
泛型方法(C# 编程指南)
泛型类(C# 编程指南)
泛型接口(C# 编程指南)
委托(C# 编程指南)
System.Collections.Generic
C# 编程指南
.NET Framework 中的泛型
其他版本
此主题尚未评级 - 评价此主题
委托 可以定义自己的类型参数。 引用泛型委托的代码可以指定类型参数以创建已关闭的构造类型,就像实例化泛型类或调用泛型方法一样,如下例所示:
C#
public delegate void Del<T>(T item); public static void Notify(int i) { } Del<int> m1 = new Del<int>(Notify);
C# 2.0 版具有称为方法组转换的新功能,此功能适用于具体委托类型和泛型委托类型,并使您可以使用如下简化的语法写入上一行:
C#
Del<int> m2 = Notify;
在泛型类内部定义的委托使用泛型类类型参数的方式可以与类方法所使用的方式相同。
C#
class Stack<T> { T[] items; int index; public delegate void StackDelegate(T[] items); }
引用委托的代码必须指定包含类的类型变量,如下所示:
C#
private static void DoWork(float[] items) { } public static void TestStack() { Stack<float> s = new Stack<float>(); Stack<float>.StackDelegate d = DoWork; }
根据典型设计模式定义事件时,泛型委托尤其有用,因为发送方参数可以为强类型,不再需要强制转换成 Object,或反向强制转换。
C#
delegate void StackEventHandler<T, U>(T sender, U eventArgs); class Stack<T> { public class StackEventArgs : System.EventArgs { } public event StackEventHandler<Stack<T>, StackEventArgs> stackEvent; protected virtual void OnStackChanged(StackEventArgs a) { stackEvent(this, a); } } class SampleClass { public void HandleStackChange<T>(Stack<T> stack, Stack<T>.StackEventArgs args) { } } public static void Test() { Stack<double> s = new Stack<double>(); SampleClass o = new SampleClass(); s.stackEvent += o.HandleStackChange; }
请参见
参考
泛型介绍(C# 编程指南)泛型方法(C# 编程指南)
泛型类(C# 编程指南)
泛型接口(C# 编程指南)
委托(C# 编程指南)
System.Collections.Generic
概念
C# 编程指南
其他资源
.NET Framework 中的泛型
相关文章推荐
- c#编程指南(三) 泛型委托(Generic Delegate)
- c#编程指南(三) 泛型委托(Generic Delegate)
- 深入解析C#编程中泛型委托的使用
- 泛型(C# 编程指南)网址
- 何时使用委托而不使用接口(C# 编程指南)
- 泛型的优点(C# 编程指南)
- 泛型 (C# 编程指南)
- 何时使用委托而不使用接口(C# 编程指南)
- 如何:为泛型列表创建迭代器块(C# 编程指南)
- 泛型类型参数(C# 编程指南)
- 委托匿名方法(C# 编程指南)
- ASP.NET 2.0 中泛型的使用(C# 编程指南)
- default 关键字泛型代码中的默认关键字(C# 编程指南)
- C#/C++ 模板和 C# 泛型之间的区别(C# 编程指南
- 泛型接口(C# 编程指南)
- 三种实例化委托的方式(C# 编程指南)
- c# 泛型 类型参数的约束(C# 编程指南)
- 委托(C# 编程指南)
- 委托中的协变和逆变(C# 编程指南)
- 带有命名方法的委托与带有匿名方法的委托(C# 编程指南)