CSharp中的委托
来源:互联网 发布:linux vi复制粘贴命令 编辑:程序博客网 时间:2024/06/01 21:35
一、什么是委托
委托是一个类,它定义了方法的类型,使得可以将方法当作另外一个方法的参数来进行传递;调用委托的时候,委托包含的所有方法将被执行。
二、委托的定义
public delegate void MyDel(int x);
public delegate string MyDel2(string msg);
三、声明委托变量
MyDel md;
四、初始化委托
md = new MyDel(方法名(intx));
五、委托赋值
md =方法名(int x);
六、多播委托
MyDelmd = new MyDel(M1);
md += M1; //增加方法
md += M1; //增加方法
md1= M1; //减少方法
七、委托的调用
if(md !=null)
md.Invoke();
八、匿名方法
delegate int MyDel (int x); //定义一个委托
MyDeldel = delegate( int x){ return x; };
九、Lambda表达式
delegate int MyDel (int x); //定义一个委托
MyDeldel2 = (int x) => {return x;};//Lambda表达式
MyDel del3 = x => {return x};//简写的Lambda表达式
十、委托示例
1.委托实现不通的国家输出不同的问候语
/// <summary>
///定义无返回值带字符串参数的委托
/// </summary>
/// <paramname="name"></param>
delegate void ShowHiDelegate(stringname);
/// <summary>
///输出问候语
/// </summary>
/// <paramname="name"></param>
/// <paramname="show"></param>
static void SayHi(string name,ShowHiDelegate show)
{
show.Invoke(name);
}
/// <summary>
///输出中文问候语
/// </summary>
/// <param name="name">名字</param>
static void SayChina(string name)
{
Console.WriteLine("你好:" + name);
}
/// <summary>
///输出英文问候语
/// </summary>
/// <param name="name">名字</param>
static void SayEnglish(string name)
{
Console.WriteLine("Hi," +name);
}
static void Main(string[] args)
{
ShowHiDelegate showChina = newShowHiDelegate(SayChina);
//输出中文问候语
SayHi("张三", showChina);
ShowHiDelegate showEnglish = newShowHiDelegate(SayEnglish);
//输出中文问候语
SayHi("Tony",showEnglish);
Console.WriteLine("----------------------------------------");
Console.WriteLine("多播委托实现打招呼");
//多播委托输出
ShowHiDelegate sd = newShowHiDelegate(SayChina);
sd += SayEnglish;
SayHi("Tom", sd);
Console.ReadKey();
}
输出结果:
十一、Lamdba表达式在实际中的应用
List<int> list = newList<int>() { 1, 3, 2, 4, 6, 5, 8, 7, 9 };
list.Sort();
Console.WriteLine("操作源数组");
foreach (int item in list)
{
Console.Write(item +"\0");
}
Console.WriteLine();
Console.WriteLine("找出大于4的所有数");
//找出大于4的数
System.Collections.IEnumerableenumerable = list.Where(x => x > 4);
foreach (int item in enumerable)
{
Console.Write(item+"\0");
}
Console.WriteLine();
Console.ReadKey();
输出结果:
十二、C#中已定义好的委托(泛型委托Action<>)
1.带参无返回值委托
///<summary>
///输出问候语
///</summary>
///<param name="name"></param>
///<param name="show"></param>
staticvoid SayHi(string name, Action<string> show)
{
show.Invoke(name);
}
///<summary>
///输出中文问候语
///</summary>
/// <param name="name">名字</param>
staticvoid SayChina(string name)
{
Console.WriteLine("你好:" +name);
}
///<summary>
///输出英文问候语
///</summary>
/// <param name="name">名字</param>
staticvoid SayEnglish(string name)
{
Console.WriteLine("Hi," + name);
}
staticvoid Main(string[] args)
{
#region委托demo
Action<string> showChina = newAction<string>(SayChina);
//输出中文问候语
SayHi("张三", showChina);
Action<string> showEnglish = newAction<string>(SayEnglish);
//输出中文问候语
SayHi("Tony", showEnglish);
Console.WriteLine("----------------------------------------");
Console.WriteLine("多播委托实现打招呼");
//多播委托输出
Action<string> sd = newAction<string>(SayChina);
sd += SayEnglish;
SayHi("Tom", sd);
Console.ReadKey();
#endregion
}
2.带参带返回值委托(Func<>)
///<summary>
///输出问候语
///</summary>
///<param name="name"></param>
///<param name="show"></param>
publicstring SayHi(string name, Func<string, string> show)
{
return show.Invoke(name);
}
///<summary>
///输出中文问候语
///</summary>
/// <param name="name">名字</param>
publicstring SayChina(string name)
{
return "你好:" + name;
}
///<summary>
///输出英文问候语
///</summary>
/// <param name="name">名字</param>
publicstring SayEnglish(string name)
{
return "Hi," + name;
}
staticvoid Main(string[] args)
{
#region委托demo(Func实例)
FuncDemo fd = new FuncDemo();
Func<string, string> showChina = newFunc<string, string>(fd.SayChina);
//输出中文问候语
Console.WriteLine(fd.SayHi("张三",showChina));
Func<string, string> showEnglish =new Func<string, string>(fd.SayEnglish);
//输出中文问候语
Console.WriteLine(fd.SayHi("Tony", showEnglish));
Console.WriteLine("----------------------------------------");
Console.WriteLine("多播委托实现打招呼");
//多播委托输出
Func<string, string> sd = newFunc<string, string>(fd.SayChina);
sd += fd.SayEnglish;
foreach (Func<string, string> item insd.GetInvocationList())
{
Console.WriteLine(item.Invoke("Tom"));
}
Console.ReadKey();
#endregion
}
输出结果:
- CSharp中的委托
- cSharp(c#)中的delegate(委托)
- C# 中的委托和事件(http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx)
- C# 中的委托和事件——http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx
- Csharp中的注释
- Csharp中的注释
- Csharp中的条件结构
- Csharp中的循环结构
- Csharp 3.3.3 中的@
- CSharp中的正则表达式
- Csharp中的类和对象
- Csharp中的多态类型
- csharp
- Csharp
- 《csharp高级编程》 学习笔记 第七章 委托和事件
- Csharp的委托兼用适合于初学者更新到4._0
- CSharp学习笔记之十一 委托与事件
- CSharp学习笔记之十二 委托与事件(续)
- 如何抽象数据类型
- Toad导出数据字典,把数据库所有的表结构导出到htm中。(写文档很有用。)
- 实用:外出旅游日语大全
- linux mount使用方法
- 南方谷铺,父母的健康之源!
- CSharp中的委托
- C++重载运算与类型转换
- centos安装在线java环境。
- SVM/hinge loss function
- 关于出现logger的警告解决方法
- php常用的字符串处理函数
- Docker学习与总结
- C# socket 发送接收消息与发送接收文件 群发文件
- Redis 通讯协议分析