你的位置:首页 > 软件开发 > ASP.net > [.net 面向对象编程基础] 委托

[.net 面向对象编程基础] 委托

发布时间:2015-06-16 12:00:39
[.net 面向对象编程基础] (20) 委托 上节在讲到LINQ的匿名方法中说到了委托,不过比较简单,没了解清楚没关系,这节中会详细说明委托。1.什么是委托?学习委托,我想说,学会了就感觉简单的不能再简单了,没学过或都不愿了解的人,看着就头大, ...

[.net 面向对象编程基础]   委托

[.net get='_blank'>面向对象编程基础] (20)  委托

   上节在讲到LINQ的匿名方法中说到了委托,不过比较简单,没了解清楚没关系,这节中会详细说明委托。

1.什么是委托?

学习委托,我想说,学会了就感觉简单的不能再简单了,没学过或都不愿了解的人,看着就头大,其实很简单。委托在.net面向对象编程和学习设计模式中非常重要,是学习.net面向对象编程必须要学会并掌握的。

委托从字面上理解,就是把做一些事情交给别人来帮忙完成。在C#中也可以这样理解,委托就是动态调用方法。这样说明,就很好理解了。

平时我们会遇到这样的例子需要处理,比如有一个动物园(Zoo)(我还是以前面的动物来说吧)里面有狗(Dog)、鸡(Chicken)、羊(Sheep)……,也许还会再进来一些新品种。参观动物员的人想听动物叫声,那么可以让管理员协助(动物只听懂管理员的),这样就是一个委托的例子。

在实现委托之前,我们先看一下委托的定义:

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

委托(delegate),有些书上叫代理或代表,都是一个意思,为了避免了另一个概念代理(Proxy)混淆,还是叫委托更好一些。

学过c++的人很熟悉指针,C#中没有了指针,使用了委托,不同的是,委托是一个安全的类型,也是面向对象的。

2.委托的使用

委托(delegate)的声明的语法如下:

    public delegate void Del(string parameter);

 定义委托基本上是定义一个新类,所以可以在定义类的任何地方定义委托,既可以在另一个类的内部定义,也可以在任何类的外部定义,还可以在命名空间中把委托定义为顶层对象。根据定义的可见性,可以在委托定义上添加一般的访问修饰符:public、private、protected等:

实际上,“定义一个委托”是指“定义一个新类”。只是把class换成了delegate而已,委托实现为派生自基类System. Multicast Delegate的类,System.MulticastDelegate又派生自基类System.Delegate。

下面我们使用委托来实现上面动物园的实例,实现如下: 

 1 /// <summary> 2 /// 动物类 3 /// </summary> 4 class Zoo 5 { 6   public class Manage 7   { 8     public delegate void Shout();   9     public static void CallAnimalShout(Shout shout)10     {11       shout();12     }13   }    14   public class Dog15   {16     string name;17     public Dog(string name)18     {19       this.name = name;20     }21     public void DogShout()      {22 23       Console.WriteLine("我是小狗:" + this.name + "汪~汪~汪");24     }      25   }26   public class Sheep27   {28     string name;29     public Sheep(string name)30     {31       this.name = name;32     }33     public void SheepShout()34     {35       Console.WriteLine("我是小羊:" + this.name + "咩~咩~咩");36     }37   }38   public class Checken39   {40     string name;41     public Checken(string name)42     {43       this.name = name;44     }45     public void ChickenShout()46     {47       Console.WriteLine("我是小鸡:" + this.name + "喔~喔~喔");48     }49   }50 }
 <如果对你有帮助,记得点一下推荐哦,有不明白的地方或写的不对的地方,请多交流> 

QQ群:467189533

==============================================================================================  


原标题:[.net 面向对象编程基础] 委托

关键词:.NET

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。