委托简介

来源:互联网 发布:爱乐软件 编辑:程序博客网 时间:2024/06/09 23:36

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

2委托的注意事项
2.1 委托的定义和方法的定义类似,只是在前面加了一个delegate,但委托不是方法,它是一种类型。是一种特殊的类型,看成是一种新的对象类型比较好理解。用于对与该委托有相同签名的方法调用。
2.2委托相当于C++中的函数指针,但它是类型安全的。
2. 3委托是从System.Delegate派生,但不能象定义常规类型一样直接从System.Delegate派生,对委托的声明只能通过上面的声明格式进行定义。关键字delegate通知编译器这是一个委托类型,从而在编译的时候对该类进行封装,对这一过程C#定义了专门的语法来处理这一过程。
2.4 不能从一个委托类型进行派生,因为它也是默认sealed的
2.5委托即可以对静态方法进行调用也可以对实例方法进行调用。
2.6每个委托类型包含一个自己的调用列表,当组合一个委托或从一个委托中删除一个委托时都将产生个新的调用列表。
2.7两个不同类型的委托即使它们有相同的签名和返回值,但还是两个不同类型的委托。但其实在使用中可看作是相同的。

3例子:
3.1声明委托
delegate 返回值类型 委托类型名(参数)
例如:delegate void SayHello(string name);
3.2 准备一个方法(和委托具有相同的签名)
例如: static void SayHi(string name)
{
Console.WriteLine(“Hi,” + name);
}
3.3 创建委托对象
SayHello sh = new SayHello(SayHi);
3.4委托调用
sh(“peter”);

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{    class Program    {        static void SayHi(string name)        {            Console.WriteLine("Hi," + name);        }        delegate void SayHello(string name);        static void Main(string[] args)        {            SayHello sh = new SayHello(SayHi);            sh("peter");//实际使用sh.Invoke("peter");            Console.ReadKey();        }    }}

委托还可以追加和删除方法,实际调用的是combine和remove方法

0 0
原创粉丝点击