最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#零基礎學習理解委托

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

   說來慚愧,在大學的課程中,竟然沒有聽說過委托這個名稱。那么今天我就帶著大家一起探討下委托和事件。

咱們先來看下委托

我主要從以下幾個方面講解

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

為什么使用委托?

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

什么是委托?

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

如何使用委托

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

 案例1:中國人和英國人問好

 分析:1.首先我們需要編寫一個中國人問好的方法和一個英國人問好的方法。

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

       3.使用委托實現(xiàn)各個國家人的問好功能

  使用委托分為三個步驟: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:通過委托將子窗體中的值傳遞到父窗體中

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

 

子窗體中代碼如下:

復制代碼 代碼如下:

//定義委托

        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;

        }


我們來分析下上述兩斷代碼:

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

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

   不知道,看過上述3個案例,大家對委托有沒有一個相對清晰的認識,如果本文能幫助迷途中的你,那就更好了。

相關文章

  • C#實現(xiàn)UDP打洞的示例代碼

    C#實現(xiàn)UDP打洞的示例代碼

    這篇文章主要為大家詳細介紹了C#中實現(xiàn)UDP打洞的相關知識,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-01-01
  • 根據(jù)灰度值填充字符-單文件單線程版

    根據(jù)灰度值填充字符-單文件單線程版

    本文介紹如何實現(xiàn):類似于一個圖片,處理后,根據(jù)不同的灰度值,填充不同的字符等相關功能,感興趣的朋友可以了解下哦
    2013-01-01
  • c#中xml文檔注釋編譯dll引用到其它項目示例

    c#中xml文檔注釋編譯dll引用到其它項目示例

    這篇文章主要介紹了c#中xml文檔注釋編譯dll引用到其它項目示例,需要的朋友可以參考下
    2014-02-02
  • C#知識整理

    C#知識整理

    本文主要介紹了C#的相關知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 詳解C# FileStream類

    詳解C# FileStream類

    這篇文章主要介紹了詳解C# FileStream類的相關知識,文中講解的非常細致,代碼供大家參考和學習,感興趣的朋友可以了解下
    2020-06-06
  • C#通過屬性名稱獲取(讀取)屬性值的方法

    C#通過屬性名稱獲取(讀取)屬性值的方法

    本文主要介紹了C#通過屬性名稱獲取(讀取)屬性值的方法,并提供了簡化版代碼,具有很好的參考價值,需要的朋友可以看下
    2016-12-12
  • C#字符串String及字符Char的相關方法

    C#字符串String及字符Char的相關方法

    這篇文章介紹了C#字符串String及字符Char的相關方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#實現(xiàn)將千分位字符串轉換成數(shù)字的方法

    C#實現(xiàn)將千分位字符串轉換成數(shù)字的方法

    這篇文章主要介紹了C#實現(xiàn)將千分位字符串轉換成數(shù)字的方法,很適合初學者更好的理解C#字符串原理,需要的朋友可以參考下
    2014-08-08
  • C# 實現(xiàn)視頻監(jiān)控系統(tǒng)(附源碼)

    C# 實現(xiàn)視頻監(jiān)控系統(tǒng)(附源碼)

    這篇文章主要介紹了C# 如何實現(xiàn)視頻監(jiān)控系統(tǒng),幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#入?yún)⑹褂靡妙愋鸵觬ef的原因解析

    C#入?yún)⑹褂靡妙愋鸵觬ef的原因解析

    這篇文章主要介紹了C#入?yún)⑹褂靡妙愋鸵觬ef的原因解析,我們在實際開發(fā)中還是能夠碰到一些引用類型添加ref的場景,其實道理也是一樣的,就是將引用類型的棧的地址傳遞到了方法中,那么和不添加有啥區(qū)別,感興趣的朋友跟隨小編一起看看吧
    2022-11-11

最新評論

大同县| 文水县| 湄潭县| 新疆| 抚顺市| 永仁县| 灵山县| 平湖市| 屏边| 诸城市| 兰西县| 荃湾区| 龙川县| 金平| 无棣县| 荔波县| 高阳县| 武城县| 江口县| 久治县| 平舆县| 平昌县| 同心县| 峨边| 沁源县| 常山县| 比如县| 夏河县| 阿巴嘎旗| 临沂市| 津市市| 云阳县| 盐边县| 浦北县| 新田县| 广州市| 饶平县| 淅川县| 通山县| 九江县| 浮梁县|