亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

委托學習筆記1:委托的基本使用

2019-11-17 02:26:22
字體:
來源:轉載
供稿:網友

委托學習筆記1:委托的基本使用

一、引子

在正式說委托前,我先給一個例子,然后引出后面要說的委托。

很簡單,就是一個機器人打招呼的。

代碼清單1.1:

    class Robot    {        public void GreetByChinese(string name)        {            Console.WriteLine("你好," + name + "!");        }        public void GreetByEnglish(string name)        {            Console.WriteLine("Hello," + name + "!");        }        //打招呼        public void DoGreet(string name,string lang)        {            switch (lang)            {                case "chinese":                    GreetByChinese(name);                    break;                case "english":                    GreetByEnglish(name);                    break;                default: break;            }        }    }    class PRogram    {        static void Main(string[] args)        {            //實例化機器人對象            Robot robot = new Robot();            string name = Console.ReadLine();            robot.DoGreet(name,"chinese");            robot.DoGreet(name,"english");            Console.Read();        }            }
View Code

代碼清單1.1中創建了一個機器人類,類中封裝了兩個打招呼的方法和一個調用這兩個方法的公共方法。DoGreet方法中,只要帶name和switch中的條件,就可以打印出對應語言打招呼的語句。

那么,如果我要增加其他的語言,如法語、日語、韓語等,我除了增加對應的方法,還需要改DoGreet方法里的case語句,維護量較大。那有什么辦法可以解決這種尷尬呢?

一種比較簡單的方法是,直接將方法作為參數(變量),傳給另一個方法(DoGreet),在其中執行即可。

但我們都知道,能作為方法的參數的是某一類型的對象或變量,而方法是個什么類型呢?確實找不出方法對應的類型。但依然有種方法可以間接的將方法作為一個參數來使用,這便引出了,下面要提到的“委托”。

二、關于委托,微軟給出的定義如下:

“委托用于將方法作為參數傳遞給其他方法。”

早在C#1.0時,就已開始支持這個特性(用過VS2003的園友,應該是最清楚不過了)。關于微軟給出的定義,已經很好理解了:我們利用委托,把方法作為一個參數(變量)傳遞給其他的方法,從而由其他方法來代為執行這個當做參數的方法里的動作。

三、那么怎么去使用委托呢?

使用委托,基本要按照如下步驟實現:

1、定義一個委托類型

訪問修飾符delegate返回類型委托類型名稱(參數列表);

Ex:publicdelegatevoidGreet(stringname);

2、創建一個執行某動作的方法(返回類型和參數列表須與委托類型相同)

訪問修飾符返回類型方法名稱(參數列表){......}

Ex:publicvoidGreetByChinese(stringname)

{

Console.WriteLine(“你好,”+name+“!”);

}

3、實例化委托類型

委托類型名稱委托對象名稱=方法名稱;

Ex:Greetgreet=GreetByChinese;

4、開始使用,執行操作

委托對象名稱(參數列表);

或:委托對象名稱.Invoke(參數列表);

Ex:greet(“季節旋風”);或:greet.Invoke(“季節旋風”);

如上,就這么個簡單的流程,是不是很簡單。但這里,可能有人會說,定義中不是將方法作為參數傳給另一個方法嗎?怎么沒有這么用?其實這個不用擔心,我們已經在步驟3中將方法引用給了greet對象,既然是對象,那么久可以作為方法的參數,就可以很好地解決這個疑問。

具體的看下面的代碼清單3.1:

    //一個常用的委托,打招呼    delegate void Greet(string name);    //一個機器人類,封裝打招呼    class Robot    {        public void GreetByChiness(string name)        {            Console.WriteLine("你好," + name + "!");        }        public void GreetByEnglish(string name)        {            Console.WriteLine("Hello," + name + "!");        }public void GreetByJapaness(string name){Console.WriteLine("こんにちは," + name + "!");}        //打招呼        public void DoGreet(string name, Greet greet)        {            greet(name);        }    }    class SampleDelegate    {        static void Main(string[] args)        {            //實例化機器人對象            Robot robot = new Robot();            string name = Console.ReadLine();            //通過把方法作為變量來實現打招呼            robot.DoGreet(name, robot.GreetByChiness);            robot.DoGreet(name, robot.GreetByEnglish);robot.DoGreet(name, robot.GreetByJapaness);            Console.Read();        }}
View Code

執行結果如下:

依然是機器人大招呼的例子,但用到了委托,這樣一來是不是更簡潔了?這里已經可以輕松地將方法作為參數傳遞給執行方法(DoGreet)中,并在其中執行操作。

四、合并委托(多路廣播委托)

委托對象的一個有用屬性是:可以使用“+”運算符將多個對象分配給一個委托實例。多播委托包含已分配委托的列表。在調用多播委托時,它會按順序調用列表中的委托。只能合并相同類型的委托。“-”運算符可用于從多播委托中移除組件委托。

依然用機器人打招呼的例子來講,這里就不再使用DoGreet方法了,直接在Main方法中來做“打招呼”動作。如下(代碼清單4.1):

Greet greet = robot.GreetByChiness;greet += robot.GreetByEnglish;greet += robot.GreetByJapaness;greet(name);

在運行時,它會按順序執行調用的方法,如下圖:

值得注意的是,只有對委托對象greet初始化后才可進行多播操作,例如下面的這種寫法就是錯誤的:

Greetgreet+=robot.GreetByChiness;

在執行移除(“-”)操作時,跟合并操作類似,但它是從委托中移除已有的方法。例如將代碼清單4.1的代碼后面加上,下面代碼(代碼清單4.2):

Console.WriteLine("移除日語后:");greet -= robot.GreetByJapaness;greet(name);

那么第二次greet時,會少一個日語問候,執行結果如下圖:


上一篇:C#協變和逆變

下一篇:C# mongodb [上]

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产日韩一区二区| 久久久久久91香蕉国产| 国产精品视频免费观看www| 欧美日韩亚洲高清| 色妞在线综合亚洲欧美| 清纯唯美日韩制服另类| 久久久久久久97| 成人午夜在线视频一区| 成人av资源在线播放| 亚洲一区二区三| 人妖精品videosex性欧美| 欧美激情综合色| 国产主播欧美精品| 欧美日韩成人在线播放| 欧美尺度大的性做爰视频| 成人亚洲综合色就1024| 国模私拍一区二区三区| 成人精品一区二区三区电影黑人| 亚洲国产精品推荐| 亚洲欧洲日产国产网站| 国产综合久久久久| 久久人人97超碰精品888| 欧美激情视频网| 国产大片精品免费永久看nba| 欧美成人剧情片在线观看| 亚洲人成电影在线观看天堂色| 欧美激情亚洲综合一区| 欧美亚洲视频一区二区| 亚洲精品综合精品自拍| 丝袜美腿亚洲一区二区| 久久综合国产精品台湾中文娱乐网| 欧美激情一区二区久久久| 亚洲一区二区中文| 亚洲国产精品系列| 狠狠躁夜夜躁人人躁婷婷91| 26uuu亚洲伊人春色| 欧美日韩视频在线| 日韩美女免费观看| 亚洲一级黄色av| 欧美日韩国产精品一区二区三区四区| 欧美日韩中文在线观看| 91久久久久久久久久久久久| 国产亚洲精品久久久| 欧美日韩黄色大片| 国产精品久久久久久久久借妻| 亚洲毛片在线免费观看| 国产一区欧美二区三区| 亚洲成人黄色网址| 欧美在线视频导航| 国产精品露脸av在线| 欧美性在线视频| 成人午夜黄色影院| 在线观看欧美www| 国产日韩欧美日韩| 国产91在线高潮白浆在线观看| 亚洲美腿欧美激情另类| 久久久91精品国产一区不卡| 日韩国产欧美精品在线| 久久久欧美一区二区| 日韩毛片在线看| 97超级碰在线看视频免费在线看| 国产精品第100页| 国产91亚洲精品| 日韩欧美aⅴ综合网站发布| 中文字幕亚洲自拍| 国产成人久久精品| 在线播放日韩av| 欧美超级乱淫片喷水| 国外成人免费在线播放| 精品丝袜一区二区三区| 热久久美女精品天天吊色| 欧洲s码亚洲m码精品一区| 亚洲人午夜精品免费| 国产精品尤物福利片在线观看| 亚洲变态欧美另类捆绑| 国产精品自产拍在线观看中文| 欧美日韩国产激情| 国产精品久久久久免费a∨| 亚洲欧美自拍一区| 欧美黄色片免费观看| 成人激情春色网| 亚洲欧美另类自拍| 亚洲欧美国产日韩天堂区| 色一区av在线| 欧美日韩成人在线视频| 亚洲级视频在线观看免费1级| 国产精品私拍pans大尺度在线| 日韩小视频在线| 久久精品国产成人| 97香蕉超级碰碰久久免费的优势| 国产精品视频免费观看www| 久久久国产一区二区| 国产亚洲视频中文字幕视频| 国产欧美在线看| 久久五月天色综合| 欧美成人网在线| 国产精品 欧美在线| 久久福利视频导航| 国产经典一区二区| 欧美久久久精品| 久久久久亚洲精品国产| 久久综合久中文字幕青草| 久久影院资源网| 9.1国产丝袜在线观看| 在线观看久久久久久| 欧美日本啪啪无遮挡网站| 91精品国产91久久久久久不卡| 亚洲精品大尺度| 欧美激情一级欧美精品| 国产精品揄拍500视频| 国产成人+综合亚洲+天堂| 91在线精品播放| 中文字幕在线看视频国产欧美| 亚洲精品久久久久| 成人啪啪免费看| 国产主播在线一区| 精品国内自产拍在线观看| 亚洲国产91色在线| 中文字幕日韩欧美在线| 欧美成人免费全部| www日韩中文字幕在线看| 亚洲男人天堂九九视频| 78m国产成人精品视频| 亚洲天堂男人天堂女人天堂| 日韩精品中文字幕久久臀| 精品香蕉一区二区三区| 97香蕉超级碰碰久久免费软件| 精品亚洲精品福利线在观看| 亚洲男人天堂古典| 欧美精品亚州精品| 国产精自产拍久久久久久| 欧美成人免费播放| 日本精品免费一区二区三区| 在线电影欧美日韩一区二区私密| 国产精品视频xxxx| 国产精品私拍pans大尺度在线| 亚洲人成电影在线播放| 国产欧美中文字幕| 国产精品伦子伦免费视频| 欧美又大又硬又粗bbbbb| 精品国产91久久久久久| 欧美成人三级视频网站| 欧美精品videosex牲欧美| 美女福利精品视频| 国产日韩av高清| 国产精品久久电影观看| 国产深夜精品福利| 另类图片亚洲另类| 亚洲激情在线观看| 欧美亚洲激情视频| 亚洲欧美第一页| 欧美精品18videos性欧美| 国产精品日日摸夜夜添夜夜av| 精品久久久久人成| 亚洲午夜av电影| 亚洲国产黄色片| 亚洲小视频在线| 国产精品高潮呻吟久久av野狼| 亚洲电影免费观看高清完整版在线观看| 韩国福利视频一区| 在线视频日本亚洲性| 日韩激情视频在线| 欧美日韩国产黄| 青青青国产精品一区二区|