委托(delegate)1、可以认为是这样的对象,它包含具有相同签名和返回值类型的有序方法列表。2、可以理解为函数的一个包装,它使得C#中的函数可以作为参数来被传递。

委托的定义和方法的定义类似,只是在定义的前面多一个delegate关键字。

public delegate void MyDelegate( int para1, string para2);
//包装
public void MyMethod(int a, string b); //返回类型相同,参数个数,顺序和类型相同。
  • 方法的签名 必须 与 委托 一致,方法签名包括参数的个数、类型和顺序。
  • 方法的返回类型要和 委托 一致,注意,方法的返回类型不属于方法签名的一部分。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks; namespace 作业1
    {
    class Program
    {
    //1.使用delegate定义一个委托类型
    delegate void MyDelegate(int para1, int para2);
    static void Main(string[] args)
    { //2.声明委托变量d
    MyDelegate d; //3.实例化委托类型,传递的方法也可以为静态方法,这里传递的是实例方法
    d=new MyDelegate(new Program().Add); //4.委托类型作为参数传递给另一个方法
    MyMethod(d);
    Console.ReadKey();
    } //该方法的定义必须与委托定义相同,即返回类型为void,两个int类型的参数
    void Add(int para1,int para2)
    {
    int sum = para1 + para2;
    Console.WriteLine("两个值的和为:"+sum);
    } //方法的参数是委托类型
    private static void MyMethod(MyDelegate mydelegate)
    {
    //5. 在方法中调用委托
    mydelegate(, );
    } }
    }

    委拖链

委托链其实就是委托类型,只是委托链把多个委托链接在一起而已,也就是说,我们把链接了多个方法的委托称为委托链或多路广播委托。

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 作业1
{
class Program
{
public delegate void DelegateTest();
static void Main(string[] args)
{ //用静态方法实例化委托
DelegateTest dtDelegate = new DelegateTest(Program.method1); //用实例方法
DelegateTest deDelegate1 = new DelegateTest(new Program().method2); //定义一个委托对象,一开始指定为空,即不代表什么方法
DelegateTest delegateChain = null; //使用+符号链接委拖 -符号移除委托
delegateChain += dtDelegate;
delegateChain += deDelegate1;
delegateChain += deDelegate1;
delegateChain += dtDelegate;
delegateChain-= dtDelegate;
delegateChain(); Console.ReadKey();
} //静态方法
private static void method1()
{
Console.WriteLine("这里是静态方法");
} private void method2()
{
Console.WriteLine("这里是实例方法");
}
}
}

正式进入C#的世界——委托的更多相关文章

  1. 破坏双亲委托机制的一些情况---Tomcat和JDBC,破坏后的安全问题

    采用双亲委托机制的原因 类加载器就是将字节码搬进jvm方法区的组件.我们知道,JVM识别加载进来的类是通过类加载器+类全名完成的,也就是说同一个类由不同类加载器加载进去的话就会被视为不同的类.jdk提 ...

  2. Ruby之基础介绍(二)

    前言 上一篇我们简单介绍了下Ruby,这一节我们开始正式步入Ruby的世界,一探究竟. Ruby特点 (1)面向对象支持. (2)动态语言:我们可以修改已经定义过的类,也可以为现有类添加实例方法. ( ...

  3. VC++动态链接库(DLL)编程深入浅出(zz)

    VC++动态链接库(DLL)编程深入浅出(zz) 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用 ...

  4. [转载]我的WCF之旅(1):创建一个简单的WCF程序

    为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...

  5. 在中文windows下使用pywinauto进行窗口操作

    这两天开始接触pywinauto,听说百度的自动化QA也用这个模块,于是来了兴趣,但网上的教程很少,而且基本上都是拿官方的notepad来说,首先中文菜单的支持是问题,其次各种操作也没有写清楚,阅读官 ...

  6. 跟我一起学WCF(3)——利用Web Services开发分布式应用

    一.引言 在前面文章中分别介绍了MSMQ和.NET Remoting技术,今天继续分享.NET 平台下另一种分布式技术——Web Services 二.Web Services 详细介绍 2.1 We ...

  7. Lua面向对象编程

    Lua中的table就是一种对象,看以下一段简单的代码: , b = } , b = } local tb3 = tb1 if tb1 == tb2 then print("tb1 == t ...

  8. 12---Net基础加强

    使用ShowDialog窗体之间的回传值: using System; using System.Collections.Generic; using System.ComponentModel; u ...

  9. 我的WCF之旅(1):创建一个简单的WCF程序

    为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...

随机推荐

  1. 疯狂学习java web2(css)

    CSS应该是样式描述的意思,定义如下: 什么是 CSS? CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 ...

  2. 导出页面文档(只在IE8下测试过)

    之前说过一篇关于打印的方法,就顺便也看了一下导出,但是该方法需要用户更改浏览器的安全级别设置,因此并不十分推荐,大家如真有需要可以参考一下ZeroClipboard这款插件,我有时间也会去学习一下并贴 ...

  3. mysql操作之二

    特殊数据类型 表约束 表连接 索引 触发器 安全性 DB设计 alter table student modify id int primary key; 主銉不可重复修改 alter table s ...

  4. 用tbody代替div 解决 table tr的隐藏问题

    有如下需求,需要控制一个table内几个tr的显示问题.一开始想的方法是在这几个要显示的tr外面套一个div,利用div的display:none属性来解决. 但是后来发现div和tr嵌套的时候会有问 ...

  5. JSP前端总结

    一.C标签    一] <c:out value="..." default="..." escapeXml="true">   ...

  6. MVC4 教程

    http://blog.csdn.net/huangjihua0402/article/details/8507055 http://www.cnblogs.com/lc-chenlong/p/324 ...

  7. MVC form post 传值

    http://www.cnblogs.com/firstcsharp/archive/2013/08/05/3238321.html @using (Html.BeginForm())参数示例 MVC ...

  8. fpdf使用標楷體

    <? require('chinese-unicode.php'); $pdf=new PDF_Unicode(); $pdf->Open(); $pdf->AddPage(); $ ...

  9. 最近点对问题 HDU Quoit Design 1007 分治法

    #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #i ...

  10. Delphi 日志的方法 Log

    写一个日志的函数,只需要传内容进去即可,自动记录时间的,日志保存在'c:\ErpRunLog.txt'下procedure writeWorkLog(sqlstr: string);var filev ...