C#委托零基础理解

 

C#委托零基础理解(转)html

1,  为何使用委托  2.什么是委托  3.委托如何使用 程序员

为何使用委托? c#

委托是c#中很是重要的一个概念,使用委托使程序员能够将方法引用封装在委托对象内。而后能够将该委托对象传递给可调用所引用方法的代码,而没必要在编译时知道将调用哪一个方法。与C或C++中的函数指针不一样,委托是面向对象,并且是类型安全的。 安全

什么是委托? 函数

委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具备相同的行为,委托方法的使用和其余方法同样,具备参数和返回值。 this

如何使用委托 翻译

下面我们就抛开枯燥的概念,来看几个活生生的例子是怎么使用委托的吧! 指针

案例1:中国人和英国人问好 htm

分析:1.首先咱们须要编写一个中国人问好的方法和一个英国人问好的方法。 对象

       2.编写一个Greet方法,将问好方法做为一个参数,实现各个国家人的问好方法。

       3.使用委托实现各个国家人的问好功能

  使用委托分为三个步骤:1,定义委托  2.声明委托变量  3.使用委托

      // 1.定义委托

       public delegate void GreetDelegate(string name);

      class Program

    {

        static void Main(string[] args)

        {

                     //2.声明委托变量

GreetDelegate dDelegate = new GreetDelegate(ChineseGreeting);

//3.使用委托

            dDelegate("李小龙");

            Console.ReadKey();

        }

//中国人问好方法

        public static void ChineseGreeting(string name)

        {

            Console.WriteLine("早上好!" + name);

        }

        //英国人问好方法

        public static void EnglishGreeting(string name)

        {

            Console.WriteLine("Morning!" + name);

        }

        public static void Greet(string name, GreetDelegate makeGreet)

        {

            makeGreet(name);

        }

  }

为了加深你们对委托的理解,咱们再来写一个类似的例子。

案例2:翻译案例:经过委托将英文翻译为中文和韩文

//01.声明一个委托类

public delegate void MyTransDelegate(string words);

class Program

    {

        static void Main(string[] args)

        {

            //翻译方法

            //调用方法一

            //2.声明委托

            MyTransDelegate del=new MyTransDelegate(TransToCN);

            //3.调用委托

            del("aa");

//调用方法二

            Translate("aa",TransToCN);

            //调用方式三

            //MyTransDelegate del = TransToCN;

            //del("aa");

             Console.ReadKey();

        }

static  void Translate(string str,MyTransDelegate del)

        {

            del(str);

        }

        static void TransToCN(string str)

        {

            Console.WriteLine("翻译成中文了!");

        }

        static void TransToKorean(string str)

        {

            Console.WriteLine("翻译成韩语了!");

        }

}

经过这个案例,咱们能够看出使用委托的方法不止一种,不管使用哪一种方式,最终都和方式一同样。经过反编译咱们能够证实:

以下图示我经过反编译看到方法二的代码:

以下是反编译后方法三的代码

有了上述知识存储,咱们再来看一个案例:

案例3:经过委托将子窗体中的值传递到父窗体中

如图有父窗体和子窗体两个窗体,如今我想实现当点击父窗体中按钮时弹出子窗体(固然这个超级简单),在弹出子窗体后,在子窗体的文本框中输入内容,点击关闭按钮后子窗体关闭,而且将子窗体中输入的内容在父窗体的文本框中显示。

子窗体中代码以下:

//定义委托

        public delegate void Words(string words);

        //声明委托变量

        public Words words;

        private void button1_Click(object sender, EventArgs e)

        {

            words(txtchild.Text);

            this.Close();

        }

父窗体中的代码:

private void btnOpen_Click(object sender, EventArgs e)

        {

            Child child = new Child();

            child.words = GetWords;

            child.Show();

        }

        public void GetWords(string str)

        {

            txtMain.Text = str;

        }

咱们来分析下上述两断代码:

首先,咱们想在子窗体关闭时,更新父窗体文本框中的数据。可是咱们很是清楚的知道,窗体之间的空间是不能直接相互访问的,这时咱们就要找一个中介帮咱们实现父窗体数据的更新功能。因而咱们定义了带一个参数没有返回值的委托Words,而且在父窗体中定义了一个方法GetWords符合委托的条件。于此同时,在子窗体中声明了一个委托变量words,而且在关闭按钮中,调用了委托变量。

但在子窗体中咱们没有对子窗体委托变量赋值,真正的赋值放到了主窗体中。这样经过委托就实现了在子窗体中调用父窗体的方法,进而实现了父窗体文本框内容的更新。

   不知道,看过上述3个案例,你们对委托有没有一个相对清晰的认识,若是本文能帮助迷途中的你,那就更好了。

相关文章
相关标签/搜索