C# 委托及各种写法

  • 委托是嘛?

委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法)。通俗的说,委托是一个可以引用方法的对象,当创建一个委托,也就创建一个引用方法的对象,进而就可以调用那个方法,即委托可以调用它所指的方法。

  • 如何使用委托?

1、定义委托类型

[访问修饰符]delegate 返回类型 委托名(形参);

2、声明委托对象

委托名 委托实例名;

3、创建委托对象(确定与哪些方法进行绑定)

委托实例名=new 委托名(某个类的方法)

4、使用委托调用方法

委托实例名(实参)

  • 委托注意事项:

1、委托和方法必须具有相同的参数。

2、委托可以调用多个方法,即一个委托对象可以维护一个可调用方法的列表而不是单独的一个方法,称为多路广播(多播)。

3、使用+=和-=运算实现方法的增加和减少

  • 示例

using System;using System.Collections.Generic;using System.Linq;using System.Text;using Delegate;

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);

            Call objCall1 = new Call(objMath.Divide);            objCall += objCall1;//向委托增加一个方法            //objCall -= objCall1;//向委托减去一个方法
            // 调用委托实例,先执行objMath.Multiply,然后执行objMath.Divide            int result = objCall(5, 3);            System.Console.WriteLine("结果为 {0}", result);            Console.ReadKey();        }    }

写法:

1、委托 委托名=new 委托(会调用的方法名); 委托名(参数);

2、委托 委托名 =会调用的方法名; 委托名(参数);

3、匿名方法

委托 委托名=delegate(参数){会调用的方法体};委托名(参数);

4、拉姆达表达式

委托 委托名=((参数1,。。参数n)=>{会调用的方法体});委托名(参数);

5、用Action<T>和Func<T>,第一个无返回值

Func<参数1, 参数2, 返回值> 委托名= ((参数1,参数2) => {带返回值的方法体 });返回值=委托名(参数1,参数2);

贴代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using @delegate;

namespace @delegate
{
        public delegate int Call(int num1, int num2);
        class SimpleMath
        {
            // 乘法方法
            public static 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 = new Call(SimpleMath.Multiply);
            //Call objCall1 = new Call(new SimpleMath().Divide);
            //--------------------第二种写法------------------------//
            //Call objCall = SimpleMath.Multiply;
            //Call objCall1 = new SimpleMath().Divide;
            //--------------------第三种写法------------------------//
            //Call objCall = delegate(int a, int b)
            //{
            //    return a * b;
            //};
            //Call objCall1 = delegate(int a, int b)
            //{
            //    return a / b;
            //};
            //--------------------第四种写法------------------------//
            //Call objCall =((int a,int b)=> { return a*b;});
            //Call objCall1 = ((int a, int b) => { return a / b; });
            //--------------------第五种写法------------------------//
            Func<int, int, int> objCall = ((a, b) => { return a * b; });
            Func<int, int, int> objCall1 = ((a, b) => { return a / b; });
             Action<int, int> ob = ((a, b) => { Console.WriteLine(a * b); });
             ob(5, 3);
            //----------------------------------------------------//
             int result = objCall(5, 3);
             int result1 = objCall1(5, 3);
             System.Console.WriteLine("结果1为 {0},结果2为{1}", result,result1);
            Console.ReadKey();
        }
    }
}
时间: 2024-08-10 00:50:31

C# 委托及各种写法的相关文章

委托的多种写法

一.委托调用方式 1. 最原始版本: delegate string PlusStringHandle(string x, string y); class Program { static void Main(string[] args) { PlusStringHandle pHandle = new PlusStringHandle(plusString); Console.WriteLine(pHandle("abc", "edf")); Console.R

.NET委托

什么是委托? -> 初识委托 在很多应用程序中(C,C++),需要对象使用某种回调机制,能够与创建它 的实体进行通信,在.NET平台下,通过委托来提供了一种回调函数机制,在.NET平台下,委托确保回调函数是类型安全的(这也正是.NET FreamWork与非托管代码的区别).本质上来讲,委托是一个类型安全的对象,它指向程序中另一个以后会被调用的方法(或多个方法),就是将方法作为 参数来传递. C#中定义委托类型 在C#中创建一个委托类型时,需要使用关键字 delegate 关键字,类型名可以自定

c# 委托 delegate

委托是一种存储函数引用的类型,在事件和事件的处理时有重要的用途 通俗的说,委托是一个可以引用方法的类型,当创建一个委托,也就创建一个引用方法的变量,进而就可以调用那个方法,即委托可以调用它所指的方法. 使用委托 委托的使用需要以下步骤: 定义委托 delegate double ParocessDelegate(double param1,double param2); 委托的定义非常类似于函数,但不带函数体,且要使用delegate关键字.委托定义需要指明委托名称以及一个返回类型和一个参数列表

Unity3D中使用委托和事件(一)

前言: 本来早就想写写和代码设计相关的东西了,以前做2DX的时候就有过写写观察者设计模式的想法,但是实践不多.现在转到U3D的怀抱中,倒是接触了不少委托事件的写法,那干脆就在此总结一下吧. 1.C#中的委托.事件引入 本想去找一些高端的介绍来开场,但是找来找去感觉还是用百度百科中的例子来开场也是蛮适合的.当然要具体到Unity3d,我们还是要按照U3d的格式来写. 首先我们来看百度百科这个例子写的是什么? ok,原来是全球化形势下,不同语种的小伙伴们问候早安时候的一个情景.那么最直观的做法,无非

再谈委托

转自:http://www.cnblogs.com/hyddd/archive/2009/07/26/1531538.html#3183896 http://kb.cnblogs.com/page/50132/ http://www.csframework.com/archive/2/arc-2-20110617-1633.htm http://blog.sina.com.cn/s/blog_5f30147a010111y1.html http://www.cnblogs.com/daxnet/

C#中委托如何使用?(转帖)

1.委托概述委托是C#中新加入的一个类型,可以把它想作一个和Class类似的一种类型,和使用类相似,使用一个委托时,需要两个步骤,首先你要定义一个委托,就像是定义一个类一样:然后,你可以创建一个或多个该委托的实例.定义一个委托的语法是这样的:[public/protected/private] delegate returnType delegateName(paramtype param1,…)这是我自己写的,看起来好像有点怪怪的,我来解释一下,private/protected/privat

C#进阶之路(一):委托

一.什么是委托 简单说它就是一个能把方法当参数传递的对象,而且还知道怎么调用这个方法,同时也是粒度更小的“接口”(约束了指向方法的签名). 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,是种将方法动态地赋给参数的做法. 用过C/C++的,对委托不会陌生,委托可以看成函数指针的升级版本! 函数指针简介: 下面是一段C程序,Calc就是定义的函数指针. typedef int (* Calc)(int a, int b); int Add(int a, int b)

JavaScript, JQuery事件委托

1.引言 现实当中,前台MM收到快递后,她会判断收件人是谁,然后按照收件人的要求签收,甚至代为付款.(公司也不会容忍那么多员工站在门口就为了等快递); 这种事件委托还有个好处,就是即便公司又来很多员工,前台MM照样可以签收新员工的快递,新员工即便刚来但一样拥有拿自己快件的方法: 2.概念 通俗来讲: 事件有:onclick.onmouseover.onmouseout等等:委托呢,就是让别人来做,这件事情本身是加在元素上,然而你却加载别人身上来做,完成事件: 3.原理 利用冒泡原理,将事件加在父

1013 认识WebForm

我们接下来学习的WebForm会将我们现在所学集成我们与WinForm对比来看 Winform      界面端        业务逻辑端         数据访问端     窗体控件        C#代码          面向对象 ADO.NETWebForm      界面端        业务逻辑端         数据访问端       Html+CSS+JS      C#代码         面向对象 ADO.NET -------------------------------