码迷,mamicode.com
首页 > Windows程序 > 详细

C#基础学习——委托

时间:2015-06-09 23:37:48      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

using System;

namespace Test
{
    public delegate void TryDelegate(string name);
    
    public class SayHello{

      public void SpeakChinese(string name){
        Console.WriteLine("你好,"+name);
      }

      public void SpeakEnglish(string name){
        Console.WriteLine("Hello,"+name);
      }

      public void Speak(string name,TryDelegate ChoseLanguage){
        ChoseLanguage(name);
      }
    }
  
    class Program{
      static void Main(string[] args){
        SayHello sh=new SayHello();
        sh.Speak("小明",sh.SpeakChinese);
        sh.Speak("Fanun",sh.SpeakEnglish);
        Console.ReadLine();
      }
    }
}

结果:

技术分享

委托是一种特殊的对象类型,它定义了方法的类型,使得可以将方法当作另一个方法参数来进行传递,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托包含的只是方法的地址。这种方法动态的付给参数的做法,可以避免在程序中大量的使用if...else,switch语句,同时使程序具有更好的扩展性。

 

委托的多播委托

class Program{
      static void Main(string[] args){
        SayHello sh=new SayHello();
        //sh.Speak("小明",sh.SpeakChinese);
        //sh.Speak("Fanun",sh.SpeakEnglish);
        TryDelegate try1=sh.SpeakChinese;
        TryDelegate try2=sh.SpeakEnglish;
        sh.Speak("小明",try1);
        sh.Speak("Fanun",try2);
        Console.ReadLine();
      }
    }

显示的结果与上面的一致。

还有,委托不同于string的一个特性:它可以将多个方法付给同一个委托,或者将多个方法绑定到同一个委托。

class Program{
      static void Main(string[] args){
        SayHello sh=new SayHello();
        //sh.Speak("小明",sh.SpeakChinese);
        //sh.Speak("Fanun",sh.SpeakEnglish);
        TryDelegate try1=sh.SpeakChinese;
        try1+=sh.SpeakEnglish;
        sh.Speak("小明",try1);
        Console.ReadLine();
      }
    }

结果:

你好,小明

Hello,小明

C#基础学习——委托

标签:

原文地址:http://www.cnblogs.com/fanun/p/4564815.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!