委托Delegate 简介 delegate

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

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

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

2.代码定义格式

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

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

如:public delegate voidstudent(); private delegatestring 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

{

publicpartial 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(strings);

class MyClass

{

publicstatic void Hello(string s)

{

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

}

publicstatic void Goodbye(string s)

{

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

}

publicstatic 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 stringProcessDelegate<T,S>(Ts1, S s2);

publicclass Program

{

static void Main(string[] args)

{

ProcessDelegate<string,int> pd = newProcessDelegate<string,int>(newTest().Process);

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

}

}

public classTest

{

public string Process(strings1,int s2)

{

return s1 + s2;

}

}

}

  输出的结果就是:

  Text1100

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

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

在下一博文中,我将介绍如何利用委托来自定义事件。

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/257135.html

更多阅读

《混沌之戒Ω》攻略:欧米伽人物简介+剧情解析

混沌之戒欧米伽,以下简称CRO,是混沌之戒Chaos Rings的前传。主人公为一代里的Olgar(奥加),此作的性质是一个前传类型的剧情补完,即便没有一代那样宏大的故事,但是这一作的剧情却依旧感人至深。《混沌之戒Ω》攻略:欧米伽人物简介+剧情解析

虫虫大作战简介加攻略 虫虫大作战修改器

虫虫大作战简介加攻略——简介虫虫大作战是一款即时战略塔防类单机游戏,类似于植物大战僵尸,但画面感更强。玩家要控制的是蚂蚁、蜜蜂、甲虫等其它昆虫,而且,此款游戏不仅有剧情模式,还有双人对战模式,可玩性还是挺高的。虫虫大作战简介

思科模拟器:2 入门之界面简介

思科模拟器:[2]入门之界面简介——简介思科模拟器是网络工程师经常使用的网络实验模拟软件,它可以很快捷的模拟网络中的各种设备(交换机、路由器、台式电脑、笔记本电脑、服务器、网络云),搭建各种网络环境,模拟网络拓扑结构等。下面天

驾照科目三考试要求简介 驾照科目一模拟考试

驾照科目三考试要求简介——简介大家都知道现在考驾照是越来越难了,考过一科就已经很是开心了,虽然大家说的科目三挺简单的,但是还要很多方面需要注意的,下面小编就告诉大家一些自己的经验吧驾照科目三考试要求简介——方法/步骤驾照科

股市K线理论简介 中国股市简介

股市K线理论简介——简介K线是一条柱状的线条,由影线和实体组成。影线的实体上方的部分叫上影线,下方的部分叫下影线;实体分阳线和阴线两种。通过K线图,我们能够把一定周期(日、周、月等)的市况变现完全记录下来。K线理论就是研究K线的形

声明:《委托Delegate 简介 delegate》为网友千金归来分享!如侵犯到您的合法权益请联系我们删除