`

什么委托

阅读更多

 

转载于:http://blog.sina.com.cn/s/blog_604527460100oxx1.html

1.什么是委托?是用来干什么的?

委托是一个,它定义了方法的类型,使得可以将定义的方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。

委托保存的是对函数(function)的引用,即保存对存储在托管堆(managed heap)中的对象的引用,不是实际值

 

2.代码定义格式

在C#中使用delegate关键字定义委托。

[public/private/protect]修饰符 delegate [string/int/void]类型 name方法名();

如:public delegate void student();   private delegate string ClassName();

 

3.简单用例1

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace WindowsFormsApplication1

{

    public partial class Form1 : Form

    {

        private delegate void show(string msg);

 

        public Form1()

        {

            InitializeComponent();

        }

        private void Form1_Load(object sender, EventArgs e)

        {

            show show = new show(message);

            show("aaa");

        }

        private void message(string msg)

        {

            MessageBox.Show(msg);

        }

    }

}

委托可以动态的与任何方法关联(但必须保证关联的方法与委托定义的方法类型相同、参数相同),上面的例子里就是将委托与message方法进行了关联。

委托是对方法的包装。实现了对象与方法的隔离,增强了拓展性。

 

4.简单用例2

本示例演示组合委托。委托对象的一个有用属性是,它们可以“+”运算符来组合。组合的委托依次调用组成它的两个委托。只可组合相同类型的委托,并且委托类型必须具有 void 返回值。“-”运算符可用来从组合的委托移除组件委托。

using System;

delegate void MyDelegate(string s);

class MyClass

{

    public static void Hello(string s)

    {

        Console.WriteLine("  Hello, {0}!", s);

    }

    public static void Goodbye(string s)

    {

        Console.WriteLine("  Goodbye, {0}!", s);

    }

    public static void Main()

    {

        MyDelegate a, b, c, d;

        a = new MyDelegate(Hello);

        b = new MyDelegate(Goodbye);

        c = a + b;

        d = c - a;

        Console.WriteLine("Invoking delegate a:");

        a("A");

        Console.WriteLine("Invoking delegate b:");

        b("B");

        Console.WriteLine("Invoking delegate c:");

        c("C");

        Console.WriteLine("Invoking delegate d:");

        d("D");

    }

}

输出结果:

Invoking delegate a:

  Hello, A!

Invoking delegate b:

  Goodbye, B!

Invoking delegate c:

  Hello, C!

  Goodbye, C!

Invoking delegate d:

  Goodbye, D!

 

5.简单用例3

本实例展示泛型委托,即参数的类型不确定,以达到更高的灵活性:

using System;

using System.Collections.Generic;

using System.Text;

namespace Test

{

    public delegate string ProcessDelegate<T,S>(T s1, S s2);

 

    public class Program

    {

        static void Main(string[] args)

        {

            ProcessDelegate<string,int> pd = new ProcessDelegate<string,int>(new Test().Process);

            Console.WriteLine(pd("Text1", 100));

        }

    }

 

    public class Test

    {

        public string Process(string s1,int s2)

        {

            return s1 + s2;

        }

    }

}

  输出的结果就是:

  Text1100

 

委托,其实就是对方法提供一个模板、一个规范、一个定义,就好比接口是对类得抽象,委托可以理解为对方法的抽象。从而实现对方法的封装。

委托一个最主要的用途,就是事件。也就是说委托常常与事件联系在一起。

分享到:
评论

相关推荐

    介绍什么委托事件

    在.NET框架中,委托是类型安全的函数指针,它允许我们传递方法作为参数或存储方法以便稍后调用。委托是C#中实现事件处理和回调机制的关键组件。通过理解并熟练运用委托,开发者可以构建更加灵活和可扩展的代码,使...

    C#中的委托和事件(HTML)

    委托 和 事件在 .Net Framework中的应用...本文中,将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。

    学工办委托书范本精选.doc

    - **委托原因**:说明为什么委托人不能亲自处理事务,例如因为个人原因、健康状况或其他紧急情况。 - **委托事项**:具体列出被委托人需要办理的事务,务必详尽且具体,避免产生误解。 - **责任与后果**:委托人...

    C#委托 C#委托 C#委托

    在C#编程语言中,委托(Delegate)是一种强大的特性,它允许我们把方法作为参数传递,或者存储在变量中,从而实现回调函数和事件处理。本文将深入探讨C#委托的概念、用途、类型以及如何使用`DynamicInvoke`方法。 #...

    代领工资委托书(样本).pdf

    5. **委托原因**:可以简单说明为什么委托他人代领,如“现无法办理银行卡”等。 6. **法律责任**:声明如果出现任何问题,一切责任由委托人承担,这是为了保障受托人在执行任务时的权益。 7. **附件**:通常需要...

    委托例子:自定义委托,泛型委托,多播委托,

    委托在.NET框架中扮演着重要的角色,它是类型安全的函数指针,允许我们传递方法作为参数,或者将多个方法绑定到一个事件上。本示例是基于VS2015编译环境,主要展示了自定义委托、泛型委托以及多播委托的使用。 **一...

    .NET委托 .NET委托

    根据提供的信息,我们可以深入探讨.NET委托(Delegate)的相关概念及其在C#中的应用。下面将详细解释委托的基本概念、用途以及如何在实际编程场景中使用它们。 ### 委托的基本概念 在.NET框架中,委托是一种引用...

    C#委托详解:匿名委托,委托的应用(含源代码)

    首先,让我们了解什么是委托。在C#中,委托是类的实例,它定义了一种方法调用的签名,可以用来封装一个或多个具有相同签名的方法。通过使用委托,我们可以实现事件处理、回调机制和策略模式等设计模式。 匿名委托是...

    vb.net 最简单的理解委托

    首先,我们需要了解什么是委托。委托是一种引用类型,它封装了一个或多个具有相同签名的方法。这意味着,当你创建一个委托实例时,实际上你是在创建一个可以调用特定方法的对象。下面是一个简单的委托声明例子: ``...

    委托模式详细讲解(委托)

    ### 委托模式深入解析 #### 概述与核心理念 委托模式是一种设计模式,旨在通过使用一个对象(称为受委托者)来提供另一个对象(称为委托者)的功能,从而实现类的功能扩展和复用。与传统的继承机制相比,委托模式...

    对C#委托及事件委托的理解

    C#中的委托是面向对象编程的一种强大特性,它允许我们将方法作为参数传递给其他方法,或者将多个方法链接在一起形成一个事件处理链。本文将深入探讨C#中的委托和事件委托的概念、用途以及它们的工作原理。 1. **...

    C#委托demo C#委托demo

    一、什么是委托 委托在C#中是一种类型,类似于指针,但更加安全和灵活。它封装了一个或多个方法的引用,可以看作是“方法的句柄”。委托类型由系统定义(如System.Action或System.Predicate)或自定义。一旦创建了...

    QT中级(2)QTableView自定义委托(二)实现QProgressBar委托

    我们在之前写的[《QT(7)-初识委托》](https://blog.csdn.net/qq_40666149/article/details/128674837)文章末尾提到,***“使用一个类继承QStyledItemDelegate实现常用的控件委托,在使用时可以直接调用接口,灵活...

    水电费缴纳授权委托书模板doc

    水电费缴纳授权委托书是一种法律文件,用于当业主因各种原因无法亲自处理物业水、电费缴纳事务时,授权他人代表其进行操作。这份文档在日常生活和工作中非常实用,尤其是在业主需要长时间外出、忙碌或者无法亲自处理...

    winform委托应实例

    在.NET框架中,WinForm应用程序开发经常会涉及到委托和事件的使用。委托是C#中的一种类型,它代表一个方法,可以被用作参数传递或作为其他方法的返回值。事件则是对象之间通信的一种机制,通常用于处理用户界面(UI...

    委托加工合同(OEM)2014-我方委托供应商生产加工.doc

    本资源摘要信息是关于委托加工合同(OEM)的知识点总结,涉及到委托加工合同的各个方面,包括合同的定义、委托加工的意义、委托加工合同的内容、委托加工的优点和缺点等。 一、委托加工合同的定义 委托加工合同是...

    C#中委托与事件的区别

    委托(Delegate)和事件(Event)是C#中非常重要的两种机制,它们在.NET框架中扮演着极其重要的角色。理解这两种概念,对于深入学习C#编程语言,构建高效、可维护的程序架构至关重要。首先我们来探讨一下委托的概念...

Global site tag (gtag.js) - Google Analytics