C#委托初学

1、什么是委托

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

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"); } }

后面的慢慢补充。

posted @ 2016-11-19 14:55  漫步游走  阅读(151)  评论(0编辑  收藏  举报