C#委托初学

时间:2022-01-20 03:04:16

  委托可以认为是包含具有相同签名和返回值类型的有序方法的对象。

2、声明委托类型

  委托是类型,和类一样,委托类型必须在被用来创建变量以及类型的对象之前声明。

  委托中所包含的方法必须与声明委托的返回值类型、签名相同。

例:delegate void HelloWord(string name);

  委托类型声明与方法有两个不同:1以关键字delegate开头,没有方法主体“;”代替。

3、创建委托对象

委托是引用类型,因此有引用和对象。在委托类型声明之后,可以声明变量并创建类型的对象。

委托类型名    变量        方法

HelloWord chinese = Chinese;

HelloWord chinese = new HelloWord(Chinese);

方法可以使实例方法或静态方法都可以。

Program pro = new Program();

HelloWord english = pro.English;

4、赋值委托

由于委托是引用类型,我们可以通过赋值来改变包含在委托变量中的引用。

例:HelloWord chinese = Chinese;

HelloWord chinese = Chinese2;//上一个委托会被销毁

5、组合委托

委托可以使用运算符来组合创建新的委托。

HelloWord ChineseAndEnglish = chinese + english;

6、委托增加方法

  HelloWord chinese += pro.English;

增加方法实际上是生成了一个新的委托,其调用列表是左边的委托加上右边的方法的组合。

  方法是加在调用方法列表的最底部。

7、委托移除方法

  HelloWord chinese -= pro.English;

  和增加方法一样也是生成了一个新的委托,新的委托是旧的委托的副本,只是没有了被移除方法的引用。

移除委托的注意事项:

    -=运算符从列表最后开始搜索并移除一个匹配的方法;

    试图删除不存在方法没有效果;

    试图删除空委托会抛出异常;

    可以把委托和null比较判断委托的调用列表是否为空,为空则为null;

8、调用委托

  用于调用委托的参数会被调用与列表的每一个方法(除非有一个参数是输出参数)

  一个方法可以在列表中出现多次,每次调用到方法时都会被调用一次。

delegate void HelloWord(string name); class Program { static void Chinese(string name) { Console.WriteLine("你好:" + name); } void English(string name) { Console.WriteLine("Hello:" + name); } static void Main(string[] args) {
HelloWord chinese
= Chinese; Program pro = new Program();
HelloWord english
= pro.English; chinese("小明"); english("Alex"); } }

后面的慢慢补充。