c# 委托 delegate
来源:互联网 发布:bp神经网络 遗传算法 编辑:程序博客网 时间:2024/06/03 15:53
委托是一种存储函数引用的类型,在事件和事件的处理时有重要的用途
定义委托
声明委托类型的变量
初始化委托变量
要引用所需的函数,这是委托赋值的一个独特语法,函数名称是不带括号的
还可以用另一种略微简单的语法
通俗的说,委托是一个可以引用方法的类型,当创建一个委托,也就创建一个引用方法的变量,进而就可以调用那个方法,即委托可以调用它所指的方法。
1.使用委托
委托的使用需要以下步骤:定义委托
delegate double ParocessDelegate(double param1,double param2);委托的定义非常类似于函数,但不带函数体,且要使用delegate关键字。委托定义需要指明委托名称以及一个返回类型和一个参数列表
声明委托类型的变量
ProcessDelegate process;定义了委托后,就可以声明一个该委托类型的变量
初始化委托变量
process = new ProcessDelegate(Multiply);初始化委托变量时要把一个函数(此处Multiply为一个函数的名称)引用赋给委托变量,此函数需要具有与委托相同的返回类型和参数列表。c#使用上述略显古怪的语法,使用new关键字创建一个新的委托,参数为
要引用所需的函数,这是委托赋值的一个独特语法,函数名称是不带括号的
还可以用另一种略微简单的语法
process = Muiltiply;有了引用函数的委托变量之后,我们就可以用委托变量调用Muiltiply函数;也可以把委托变量传递给其他函数
process (param1,param2);示例:
namespace Delegate{ public delegate int Call(int num1, int num2);//第一步:定义委托类型 class SimpleMath { // 乘法方法 public int Multiply(int num1, int num2) { return num1 * num2; } // 除法方法 public int Divide(int num1, int num2) { return num1 / num2; } } } class Test { static void Main(string[] args) { Call objCall;//第二步:声明委托变量 // Math 类的对象 SimpleMath objMath = new SimpleMath(); // 第三步:初始化委托变量,将方法与委托关联起来 objCall = new Call(objMath.Multiply); objCall += objMath.Divide;//向委托增加一个方法 //objCall -= objMath.Divide;//向委托减去一个方法 // 调用委托实例,先执行objMath.Multiply,然后执行objMath.Divide int result = objCall(5, 3); System.Console.WriteLine("结果为 {0}", result); Console.ReadKey(); } }注意事项:
- 委托可以调用多个方法,即一个委托变量可以引用多个函数,称为多路广播
- 可以使用+=和-=运算符实现方法的增加和减少
- 无返回值的委托,引用了多少个方法就会执行多少个方法。有返回值的委托同样会执行多个引用的方法,但返回的值是最后一个方法的返回值
2.其他形式的委托
- 匿名委托
匿名委托使用起来更简洁一点,不用在定义一个专用的委托函数来传递方法,也更可以更好的理解委托
//定义委托 delegate string lookMe(string s); protected void LinkButton1_Click(object sender, EventArgs e) { //匿名委托 lookMe lm = delegate(string name) { return "亲爱的 " + name + ",请看着我的眼睛!"; }; //匿名委托调用 string name1 = "jarod"; Label1.Text = lm(name1); }
- 泛型委托
示例
public static void HellowChinese(string strChinese) { Console.WriteLine("Good morning," + strChinese); Console.ReadLine(); } Action<string> action = HellowChinese; action("Spring.");其中Action是无返回值的泛型委托,Func是有返回值的泛型委托,Predicate<>是返回bool类型的委托,他们都有多个参数的重载版本
3. 委托的各种写法
public delegate int DelegateProcess(int num1, int num2);//第一种写法DelegateProcess process= new DelegateProcess(Multiply);//第二种写法DelegateProcess process= Multiply;//第三种写法 匿名委托DelegateProcess process= delegate(int a,int b){ return a*b;}//第四种写法 Lamdba表达式DelegateProcess process =((int a,int b)=>{return a*b;});//第五种写法 Action<T>和Func<T>Action<int,int> process= ((int a,int b)=>{Console.WriteLine(a * b);});Func<int,int,int> process= ((int a,int b)=>{return a*b;});
转载自c# 委托 delegate
阅读全文
0 0
- C# 委托(delegate)
- Delegate 委托 C#
- C# 委托(Delegate)解析
- C#委托delegate使用
- C#的委托 delegate
- C# 委托(delegate)
- C#委托,delegate
- C#中的委托delegate
- c# 委托 delegate
- C#委托 Delegate
- C#委托delegate
- C# delegate - 委托
- C# 委托(Delegate)
- C# 委托 delegate
- C#学习--委托 Delegate
- C#委托 delegate
- C#委托Delegate
- C# 委托(Delegate)
- 转载:如何快速转载博文
- BZOJ3224/洛谷P3391
- 【远程桌面】Dell机器登陆与退出远程桌面
- 生活总是这样
- Hadoop和spark中读取文件通配符使用举例
- c# 委托 delegate
- 浅谈SQL Server中的三种物理连接操作
- 打包工具(构建工具)-webpack
- 使用事件委托降低重复的事件绑定,从而降低dom操作的对性能的消耗
- linux下shell编程print与printf的区别
- springcloud入门之服务消费者(ribbon)
- Python中的深拷贝和浅拷贝详解
- html+js+css学习
- iOS itunes connect权限分配