C#delegate学习
来源:互联网 发布:视频后期制作的软件 编辑:程序博客网 时间:2024/06/05 17:16
主要内容引自http://www.cnblogs.com/hyddd/archive/2009/07/26/1531538.html
Delegate中文翻译为“委托”。Msdn中对Delegate的解释如下:
C#中的委托类似于C或C++中的函数指针。使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托是面向对象、类型安全的,并且是安全的。
delegate例子
public class DelegateTest
{
// 声明delegate对象
public delegate void CompareDelegate(int a,int b);
// 欲传递的方法,它与CompareDelegate具有相同的参数和返回值类型
public static void Compare(int a,int b)
{
Console.WriteLine((a>b).ToString());
}
public static void Main()
{
// 创建delegate对象
CompareDelegate cd = new CompareDelegate(DelegateTest.Compare);
// 调用delegate
cd(1,2);
}
}
public delegate void MyTestDelegate(int i);
public class Program
{
public static void Main()
{
//创建delegate
ReceiveDelegateArgsFunc(new MyTestDelegate(DelegateFunction));
}
//这个方法接收一个delegate类型的参数,也就是接收一个函数作为参数
public static void ReceiveDelegateArgsFunc(MyTestDelegate func)
{
func(21);
}
//欲传递的方法
public static void DelegateFunction(int i)
{
System.Console.WriteLine("传过来的参数为: {0}.", i);
}
}
event事件
C#中的事件处理实际上是一种具有特殊签名的delegate
//这里自定义一个EventArgs,因为我想知道Clicker
public class ButtonClickArgs : EventArgs
{
public string Clicker;
}
public class MyButton
{
//定义一个delegate委托
public delegate void ClickHandler(object sender, ButtonClickArgs e);
//定义事件,类型为上面定义的ClickHandler委托
public event ClickHandler OnClick;
public void Click()
{
//...触发之前可能做了n多操作
//.....
//这时触发Click事件,并传入参数Clicker为本博主ivy
OnClick(this, new ButtonClickArgs() { Clicker = "ivy" });
}
}
public class Program
{
public static void Main()
{
MyButton btn = new MyButton();
//注册事件,把btn_OnClick方法压入事件队列,
//可以+=多个,这里简单点就压入一个吧。
btn.OnClick += new MyButton.ClickHandler(btn_OnClick);
}
//怎么看到这个函数很熟悉吧,就是你原来双击button自动产生的代码
public static void btn_OnClick(object sender, ButtonClickArgs e)
{
Console.WriteLine("真贱,我居然被ivy点击了!");
}
}
一些学习材料:
http://www.cnblogs.com/aplo/archive/2007/09/07/886145.html
https://msdn.microsoft.com/zh-cn/library/aa288460(VS.71).aspx
http://www.cnblogs.com/hyddd/archive/2009/07/26/1531538.html
- C#delegate学习
- 学习笔记--CLR via c#--Chapter17 Delegate
- Object C学习笔记16-委托(delegate)
- Object C学习笔记16-委托(delegate)
- C#-delegate
- C#-委托(delegate)
- C#-委托(delegate)
- delegate,C#,代理
- [C#] 委托delegate
- objective-c delegate
- objective-c - delegate
- Objective-C delegate理解
- objective-c - delegate
- objective-c delegate
- c#---delegate关键字
- c#delegate应用
- C#delegate案例
- c#delegate & event
- Android RSA加密解密
- 使用百度API实现实时公交线路查询及列表显示
- wkwebview踩坑
- JAVA当中变量什么时候需要初始化
- 解决win10系统IE普通用户打不开的问题
- C#delegate学习
- 游戏设计师问自己的问题
- ASP.NET中Session对性能的影响
- bzoj1036: [ZJOI2008]树的统计Count(树剖模版)
- 《TCP IP网络编程》尹圣雨----4.第二章习题
- gevent协程-配合爬虫使用
- scrollWidth、clientWidth、offsetWidth的区别;
- AngularJS 获取JSON数据
- Android设计模式之装饰者模式(Decorator Pattern)