委托(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. 利用js加载本地图片预览功能

    直接上代码: 经测试,除safari6包括6以下不支持,其他均可正常显示. 原因:safari6不支持filereader,同时不能使用IE滤镜导致失效. fix: 可以利用canvas,解决safa ...

  2. android布局1

    第二类:属性值必须为id的引用名“@id/id-name” 仅RelativeLayout中有效    android:layout_below      在某元素的下方     android:la ...

  3. Jquery的外部链接和编写样式

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></ ...

  4. oracle操作字符串:拼接、替换、截取、查找

    1.拼接字符串 1)可以使用“||”来拼接字符串 select '拼接'||'字符串' as str from dual 2)通过concat()函数实现 select concat('拼接', '字 ...

  5. mybatis中association的column传入多个参数值

    顾名思义,association是联合查询. 在使用association中一定要注意几个问题.文笔不好,白话文描述一下. 1: <association property="fncg ...

  6. spinner 下拉框控件

    spinnerMode=dropdown时,为下拉模式spinnerMode=dialog时,会在界面中间弹出Android:popupBackground=”#f0000000”,可以去除spinn ...

  7. HTML 基础元素

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 【Oracle】安装

    http://www.2cto.com/database/201208/150620.html 呵呵,花了一个多小时,左右把11g安装折腾好了.其中折腾SQL Developer 花了好长时间,总算搞 ...

  9. How to solve “sudo: /etc/sudoers.d is world writable”

    Run pkexec chmod 0440 /etc/sudoers

  10. cf B. Making Sequences is Fun

    http://codeforces.com/contest/373/problem/B 用二分枚举长度就可以. #include <cstdio> #include <cstring ...