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;
}
}
查看全文
相关阅读:
Mac 配置 php-fpm 时出现'/private/etc/php-fpm.conf': No such file or directory (2)
Lua数学库
Nginx在Windows上启动、停止的命令
Javascript虚拟机
Tiled Forward Shading Links
Xcode同一个Workspace中两个工程依赖于Undefined Symbol Error
Clang: Undefined symbols, but it is there using nm.
MVC+Ext.net零基础学习记录(二)
MVC+Ext.net零基础学习记录(一)
根据某个字符串查找整个数据库
原文地址:https://www.cnblogs.com/abcdwxc/p/961804.html
最新文章
C III
PyCharm切换解释器版本
Python Games
Javascript实现操作符重载
Redis可视化工具
Unity UGUI源码
SpiderMonkey教程
GLSL教程
War3模型导出
ES6兼容性
热门文章
WoW私服
Light PrePass
Python技术调查
GIT SSH
Beanstalkd Monitor
C# Beanstalkd Client
MySQL点滴
Nginx+Php Windows部署
phpdbg
Mac ps 查看进程
Copyright © 2011-2022 走看看