C#中的委托概念
来源:互联网 发布:多媒体网络信息处理 编辑:程序博客网 时间:2024/05/21 09:09
委托(delegate)也可以看成是一种数据类型,可以用于定义变量。但它是一种特殊的数据类型,它所定义的变量能接收的数值只能是一个函数,更确切地说,委托类型的变量可以接收一个函数的地址,很类似于C++语言的函数指针。简单地说:委托变量可看成是一种类型安全的函数指针,它只能接收符合其要求的函数地址。看下面示例:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { MathOptDelegate oppDel; MathOpt obj = new MathOpt(); //委托变量接收一个对象的方法引用,赋值之后像普通函数一样使用 oppDel = obj.Add; Console.WriteLine(oppDel(1,2)); } } public class MathOpt { public int Add(int arg1,int arg2) { return arg1 + arg2; } } //定义委托类型MathOptDelegate,使用关键字delegate public delegate int MathOptDelegate(int value1,int value2);}
委托是一个派生自Delegate 的类,委托接收函数时,要求函数参数类型和返回值跟委托定义的一样。只要满足这个要求,不管是静态的还是实例的都可以委托给它。
事实上,委托不仅可以代表某一函数,还可以组合“一堆”函数,然后批量执行他们。看下面示例:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication2{ class Program { static void Main(string[] args) { MyDelegate a, b, c, d; //创建引用Hello方法的委托对象a a =MyClass.Hello; Console.WriteLine("调用委托变量a:"); a("a"); //创建引用 Goodbye 方法的委托对象 b: b = MyClass.Goodbye; Console.WriteLine("调用委托变量b:"); b("b"); // a 和 b 两个委托合成 c, c = a + b; Console.WriteLine("调用委托变量c:"); c("c=a+b");// c 将按顺序调用两个方法 // 从组合委托c中移除 a ,只留下b,用d代表移除结果, d = c - a; Console.WriteLine("调用委托变量d:"); d("d=c-a");//仅调用 Goodbye 方法: } } delegate void MyDelegate(String s); class MyClass { public static void Hello(String s) { Console.WriteLine("您好,{0}",s); } public static void Goodbye(String s) { Console.WriteLine("再见,{0}", s); } }}
0 0
- C#中的委托概念
- C#委托-概念理解
- C#中的委托
- C# 中的委托
- C#中的委托
- c#中的委托!!!!
- c#中的委托
- [原创]c#中的委托
- 浅析C#中的委托
- C# 中的委托
- c#中的委托
- C#中的委托数组
- C#中的委托
- C#中的委托
- C#中的委托
- C# 中的委托类
- C# 中的委托
- C#中的委托,事件
- 操作系统
- 数据库
- 应用服务器
- 软件测试
- C++ 调用 Python 的 API 解读
- C#中的委托概念
- 应用软件
- 避免异常发生时的资源泄漏
- CentOS 6.5 Thinkpad 小红点(TrackPoint)设置
- windows7 64bit下使用service方式mongodb2.6
- opennms启动错误
- 2014-04-19学习笔记
- rkhunter 脚本学习记录(二)
- db2 断开连接几种方法的比较