委托(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关于DOM和BOM

    关于BOM和DOM BOM 下面一幅图很好的说明了BOM和DOM的关系 BOM提供了一些访问窗口对象的一些方法,我们可以用它来移动窗口位置,改变窗口大小,打开新窗口和关闭窗口,弹出对话框,进行导航以及 ...

  2. 94 Binary Tree Inorder Traversal(二叉树中序遍历Medium)

    题目意思:二叉树中序遍历,结果存在vector<int>中 解题思路:迭代 迭代实现: /** * Definition for a binary tree node. * struct ...

  3. apache 修改端口号 修改根目录 建立多个网站

    修改apache端口号选择Apache下的httpd.conf,查找:Listen,你会看到 #Listen 12.34.56.78:80Listen 80把80改成90,保存就好了 修改WampSe ...

  4. 实验一:C语言实现DES加解密算法

    计算程序执行10万次需要的时间: 总共需要175秒 加解密一次的时间小于:0.00175秒 纯计算加解密的时间会更短 去除IO操作后的时间 也就是说加解密一次的时间为0.07毫秒 /*-------- ...

  5. UIAlertView的使用方法

    UIAlertView的使用方法 1. 最简单的用法 UIAlertView*alert = [[UIAlertView alloc]initWithTitle:@"提示" mes ...

  6. 转:聊聊并发(八)——Fork/Join框架介绍

    1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架. 我们再通过 ...

  7. hdu 4545 魔法串

    http://acm.hdu.edu.cn/showproblem.php?pid=4545 #include <cstdio> #include <cstring> #inc ...

  8. poj 2031Building a Space Station

    http://poj.org/problem?id=2031 #include<cstdio> #include<cstring> #include<cmath> ...

  9. 让程序自动以管理员身份运行(用到了DuplicateToken,模拟管理员的身份,不可思议)

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...

  10. AOJ 0558 广度优先搜索

    题意:在 H * W 的地图里有 N 个工厂,每个工厂分别生产硬度为1-N 的奶酪,有一只老鼠准备把所有奶酪都吃完.老鼠的初始体力值为1,每吃一个奶酪体力值加 1.已知老鼠不能吃硬度大于当前体力值的奶 ...