欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#零基礎(chǔ)學(xué)習(xí)理解委托

 更新時(shí)間:2013年02月21日 17:03:18   作者:  
C#零基礎(chǔ)學(xué)習(xí)理解委托,需要的朋友可以參考一下

   說(shuō)來(lái)慚愧,在大學(xué)的課程中,竟然沒有聽說(shuō)過(guò)委托這個(gè)名稱。那么今天我就帶著大家一起探討下委托和事件。

咱們先來(lái)看下委托

我主要從以下幾個(gè)方面講解

1,  為什么使用委托  2.什么是委托  3.委托如何使用

為什么使用委托?

委托是c#中非常重要的一個(gè)概念,使用委托使程序員可以將方法引用封裝在委托對(duì)象內(nèi)。然后可以將該委托對(duì)象傳遞給可調(diào)用所引用方法的代碼,而不必在編譯時(shí)知道將調(diào)用哪個(gè)方法。與C或C++中的函數(shù)指針不同,委托是面向?qū)ο?,而且是類型安全的?/P>

什么是委托?

委托是一種引用方法的類型,一旦為委托分配了方法,委托將與該方法具有相同的行為,委托方法的使用和其他方法一樣,具有參數(shù)和返回值。

如何使用委托

下面咱們就拋開枯燥的概念,來(lái)看幾個(gè)活生生的例子是怎么使用委托的吧!

 案例1:中國(guó)人和英國(guó)人問(wèn)好

 分析:1.首先我們需要編寫一個(gè)中國(guó)人問(wèn)好的方法和一個(gè)英國(guó)人問(wèn)好的方法。

       2.編寫一個(gè)Greet方法,將問(wèn)好方法作為一個(gè)參數(shù),實(shí)現(xiàn)各個(gè)國(guó)家人的問(wèn)好方法。

       3.使用委托實(shí)現(xiàn)各個(gè)國(guó)家人的問(wèn)好功能

  使用委托分為三個(gè)步驟:1,定義委托  2.聲明委托變量  3.使用委托

復(fù)制代碼 代碼如下:

      // 1.定義委托

       public delegate void GreetDelegate(string name);

      class Program

    {

        static void Main(string[] args)

        {

                     //2.聲明委托變量

 GreetDelegate dDelegate = new GreetDelegate(ChineseGreeting);

//3.使用委托

            dDelegate("李小龍");

            Console.ReadKey();

        }

//中國(guó)人問(wèn)好方法

        public static void ChineseGreeting(string name)

        {

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

        }

        //英國(guó)人問(wèn)好方法

        public static void EnglishGreeting(string name)

        {

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

        }

        public static void Greet(string name, GreetDelegate makeGreet)

        {

            makeGreet(name);

        }

  }


為了加深大家對(duì)委托的理解,我們?cè)賮?lái)寫一個(gè)相似的例子。

案例2:翻譯案例:通過(guò)委托將英文翻譯為中文和韓文

復(fù)制代碼 代碼如下:

//01.聲明一個(gè)委托類

public delegate void MyTransDelegate(string words);

class Program

    {

        static void Main(string[] args)

        {

            //翻譯方法

            //調(diào)用方法一

            //2.聲明委托

            MyTransDelegate del=new MyTransDelegate(TransToCN);

            //3.調(diào)用委托

            del("aa");

//調(diào)用方法二

            Translate("aa",TransToCN);

            //調(diào)用方式三

            //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("翻譯成韓語(yǔ)了!");

        }

}


通過(guò)這個(gè)案例,我們可以看出使用委托的方法不止一種,無(wú)論使用哪種方式,最終都和方式一一樣。通過(guò)反編譯我們可以證明:

如下圖示我通過(guò)反編譯看到方法二的代碼:

 

如下是反編譯后方法三的代碼

 

有了上述知識(shí)存儲(chǔ),我們?cè)賮?lái)看一個(gè)案例:

案例3:通過(guò)委托將子窗體中的值傳遞到父窗體中

如圖有父窗體和子窗體兩個(gè)窗體,現(xiàn)在我想實(shí)現(xiàn)當(dāng)點(diǎn)擊父窗體中按鈕時(shí)彈出子窗體(當(dāng)然這個(gè)超級(jí)簡(jiǎn)單),在彈出子窗體后,在子窗體的文本框中輸入內(nèi)容,點(diǎn)擊關(guān)閉按鈕后子窗體關(guān)閉,并且將子窗體中輸入的內(nèi)容在父窗體的文本框中顯示。

 

子窗體中代碼如下:

復(fù)制代碼 代碼如下:

//定義委托

        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;

        }


我們來(lái)分析下上述兩斷代碼:

首先,我們想在子窗體關(guān)閉時(shí),更新父窗體文本框中的數(shù)據(jù)。但是我們非常清楚的知道,窗體之間的空間是不能直接相互訪問(wèn)的,這時(shí)我們就要找一個(gè)中介幫我們實(shí)現(xiàn)父窗體數(shù)據(jù)的更新功能。于是我們定義了帶一個(gè)參數(shù)沒有返回值的委托Words,并且在父窗體中定義了一個(gè)方法GetWords符合委托的條件。于此同時(shí),在子窗體中聲明了一個(gè)委托變量words,并且在關(guān)閉按鈕中,調(diào)用了委托變量。

但在子窗體中我們沒有對(duì)子窗體委托變量賦值,真正的賦值放到了主窗體中。這樣通過(guò)委托就實(shí)現(xiàn)了在子窗體中調(diào)用父窗體的方法,進(jìn)而實(shí)現(xiàn)了父窗體文本框內(nèi)容的更新。

   不知道,看過(guò)上述3個(gè)案例,大家對(duì)委托有沒有一個(gè)相對(duì)清晰的認(rèn)識(shí),如果本文能幫助迷途中的你,那就更好了。

相關(guān)文章

  • 基于C#實(shí)現(xiàn)微信支付寶掃碼支付功能

    基于C#實(shí)現(xiàn)微信支付寶掃碼支付功能

    為公司系統(tǒng)業(yè)務(wù)需要,這幾天了解了一下微信和支付寶掃碼支付的接口,并用c#實(shí)現(xiàn)了微信和支付寶掃碼支付的功能。需要的朋友跟隨小編一起看看吧
    2019-06-06
  • 基于WPF實(shí)現(xiàn)代碼查看器控件

    基于WPF實(shí)現(xiàn)代碼查看器控件

    這篇文章主要為大家詳細(xì)介紹了WPF如何實(shí)現(xiàn)代碼查看器控件,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下
    2022-11-11
  • 用C#把文件轉(zhuǎn)換為XML的代碼

    用C#把文件轉(zhuǎn)換為XML的代碼

    用C#把文件轉(zhuǎn)換為XML的代碼...
    2007-03-03
  • 使用C#連接SQL?Server的詳細(xì)圖文教程

    使用C#連接SQL?Server的詳細(xì)圖文教程

    初學(xué)者學(xué)習(xí)上位機(jī)開發(fā)遇到數(shù)據(jù)庫(kù)連接不上,是很常見的情況,可能會(huì)以各種形式呈現(xiàn)出來(lái),下面這篇文章主要給大家介紹了關(guān)于使用C#連接SQL?Server的詳細(xì)圖文教程,需要的朋友可以參考下
    2023-02-02
  • C#導(dǎo)出生成excel文件的方法小結(jié)(xml,html方式)

    C#導(dǎo)出生成excel文件的方法小結(jié)(xml,html方式)

    C#導(dǎo)出生成excel文件的方法小結(jié)(xml,html方式)。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • Unity?使用tiledmap解析地圖的詳細(xì)過(guò)程

    Unity?使用tiledmap解析地圖的詳細(xì)過(guò)程

    這篇文章主要介紹了Unity?使用tiledmap解析地圖,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • WinForm之BindingSource基礎(chǔ)操作實(shí)例教程

    WinForm之BindingSource基礎(chǔ)操作實(shí)例教程

    這篇文章主要介紹了WinForm之BindingSource基礎(chǔ)操作,對(duì)BindingSource組建的用法進(jìn)行較為深入的實(shí)例分析,需要的朋友可以參考下
    2014-08-08
  • c#執(zhí)行excel宏模版的方法

    c#執(zhí)行excel宏模版的方法

    這篇文章主要介紹了c#執(zhí)行excel宏模版的方法,導(dǎo)出Excel模版的代碼如下,大家參考使用吧
    2014-01-01
  • Unity3D實(shí)現(xiàn)警報(bào)燈

    Unity3D實(shí)現(xiàn)警報(bào)燈

    這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)警報(bào)燈效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • C#實(shí)現(xiàn)多文件壓縮與解壓功能

    C#實(shí)現(xiàn)多文件壓縮與解壓功能

    這篇文章主要為大家詳細(xì)介紹了如何利用C#語(yǔ)言實(shí)現(xiàn)多文件壓縮與解壓功能,即選擇多個(gè)文件壓縮成ZIP文件和解壓ZIP文件,需要的可以參考一下
    2022-08-08

最新評(píng)論