zoukankan
html css js c++ java
泛型委托
委托
可以定义自己的类型参数。引用泛型委托的代码可以指定类型参数以创建已关闭的构造类型,就像实例化泛型类或调用泛型方法一样,如下例所示:
public
delegate
void
Del
<
T
>
(T item);
public
static
void
Notify(
int
i)
{ }
Del
<
int
>
m1
=
new
Del
<
int
>
(Notify);
C# 2.0 版具有称为方法组转换的新功能,此功能适用于具体委托类型和泛型委托类型,并使您可以使用如下简化的语法写入上一行:
Del<
int
> m2 = Notify;
在泛型类内部定义的委托使用泛型类类型参数的方式可以与类方法所使用的方式相同。
class
Stack
<
T
>
{
T[] items;
int
index;
public
delegate
void
StackDelegate(T[] items);
}
引用委托的代码必须指定包含类的类型变量,如下所示:
private
static
void
DoWork(
float
[] items)
{ }
public
static
void
TestStack()
{
Stack
<
float
>
s
=
new
Stack
<
float
>
();
Stack
<
float
>
.StackDelegate d
=
DoWork;
}
根据典型设计模式定义事件时,泛型委托尤其有用,因为发送方参数可以为强类型,不再需要强制转换成
Object
,或反向强制转换。
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)
{ }
}
class
Test
{
public
static
void
Main()
{
Stack
<
double
>
s
=
new
Stack
<
double
>
();
SampleClass o
=
new
SampleClass();
s.stackEvent
+=
o.HandleStackChange;
}
}
查看全文
相关阅读:
NYOJ-301递推求值
二叉树
从c到c++
NYOJ-93汉诺塔(三)
历届试题 最大子阵
最大子序列和最大子矩阵
【贪心】电视节目安排
【贪心】线段覆盖
【贪心】取数游戏
【贪心】智力大冲浪
原文地址:https://www.cnblogs.com/abcdwxc/p/961804.html
最新文章
基于STM32 HID 游戏手柄开发调试
VS2013 MFC 库冲突引起的错误解决
LeetCode--Combination Sum
LeetCode--Balanced Binary Tree
LeetCode--N-Queens II
LeetCode--Merge Two Sorted Lists
Android源码编译命令详解(二)
Android源码编译命令详解(一)
LeetCode--Restore IP Addresses
数据结构与算法--单源最短路径算法之dijkstra
热门文章
操作系统--进程和线程的区别(转)
操作系统--进程状态切换以及cpu调度(转)
1475 m进制转十进制——http://codevs.cn/problem/1475/
1474 十进制转m进制——http://codevs.cn/problem/1474/
1160 蛇形矩阵
第七届蓝桥杯C语言B组题目之凑算式
2016"百度之星"-资格赛
二叉树2
2016“百度之星”-测试赛
二叉树1
Copyright © 2011-2022 走看看