国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C#中的委托(Delegate)和事件 (Event)詳解與使用范例

這篇具有很好參考價(jià)值的文章主要介紹了C#中的委托(Delegate)和事件 (Event)詳解與使用范例。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一.委托(Delegate)

1.委托(Delegate)簡(jiǎn)介

最近天氣晴雨不定,你因?yàn)楹ε麓蛴螒驎r(shí)忘記在下雨時(shí)收衣服或者在天晴時(shí)把衣服掛出去,于是你委托好友小明在天氣發(fā)生變化時(shí)打電話通知你,這就是一種委托.

下面是這種委托的實(shí)例代碼

//定義一個(gè)繼承自Delegate類的子類小明,這之后小明就具備被委托的屬性
//public為公開,void為返回類型,XiaoMing為類名,(string msg)為傳遞給注冊(cè)的方法的參數(shù)
public delegate void XiaoMing(string msg);
class Me
{
    //public代表聆聽小明的信號(hào)是公開的方法,以便小明訪問
    //static是為了固定ListenToXiaoMing在內(nèi)存中的入口以便小明能夠找到該方法的入口
    public static void ListenToXiaoMing(string msg)
    {
        if(msg == "Rain")
        {
            Console.WriteLine("下雨了!小明收衣服了!");
        }
        else if(msg == "Sunny")
        {
            Console.WriteLine("天晴了!小明曬衣服了!");

        }
    }
}


class Program
{
    static void Main(string[] args)
    {
        //初始化一個(gè)XiaoMing類的實(shí)體xiaoMing
        //將我的ListenToXiaoMing注冊(cè)在xiaoMing上
        //相當(dāng)于我與小明約定下雨后小明就通知我做出行動(dòng)(調(diào)用ListenToXiaoMing)
        XiaoMing xiaoMing = Me.ListenToXiaoMing;



        //假設(shè)今天下雨
        string weather = "Rain";
        
        //小明觀察天氣
        //將weather參數(shù)傳遞給Me.ListenToXiaoMing方法
        xiaoMing.Invoke(weather);

    }
}

以上代碼的輸出為

下雨了!小明收衣服了!

值得一提的是,如下代碼為創(chuàng)建一個(gè)繼承自Delegate類的名為XiaoMing的子類,該子類實(shí)例只接收void類型方法并且參數(shù)類型為(string)的注冊(cè),如:void foo(string test){}

public delegate void XiaoMing(string msg);

2.組播委托

你感覺小明的提醒十分靠譜,于是將這件事告訴了同樣喜歡玩游戲的小剛,于是小剛也決定請(qǐng)小明在天氣發(fā)生變化時(shí)提醒他,這就是組播委托.

當(dāng)執(zhí)行delegate.Invoke()時(shí),將會(huì)執(zhí)行所有注冊(cè)在該delegate上的方法

以下是這種委托的代碼:

public delegate void XiaoMing(string msg);


//你的類
class Me
{
    //public代表聆聽小明的信號(hào)是公開的方法,以便小明訪問
    //static是為了固定ListenToXiaoMing在內(nèi)存中的入口以便小明能夠找到該方法的入口
    public static void MeListenToXiaoMing(string msg)
    {
        if(msg == "Rain")
        {
            Console.WriteLine("下雨了!小明收衣服了!");
        }
        else if(msg == "Sunny")
        {
            Console.WriteLine("天晴了!小明曬衣服了!");

        }
    }
}


//小剛的類
class XiaoGang
{
    
    public static void XiaoGangListenToXiaoMing(string msg)
    {
        if (msg == "Rain")
        {
            Console.WriteLine("下雨了!小剛收衣服了!");
        }
        else if (msg == "Sunny")
        {
            Console.WriteLine("天晴了!小剛曬衣服了!");

        }
    }
}

class Program
{
    static void Main(string[] args)
    {
        //初始化一個(gè)XiaoMing類的實(shí)體xiaoMing
        //將我的ListenToXiaoMing注冊(cè)在xiaoMing上
        //相當(dāng)于我與小明約定下雨后小明就通知我做出行動(dòng)(調(diào)用ListenToXiaoMing)
        XiaoMing xiaoMing = Me.MeListenToXiaoMing;

        //小剛也將自己的XiaoGangListenToXiaoMing注冊(cè)到被委托人小明身上
        xiaoMing += XiaoGang.XiaoGangListenToXiaoMing;



        //假設(shè)今天下雨
        string weather = "Rain";

        //小明觀察天氣
        //將weather參數(shù)傳遞給Me.ListenToXiaoMing方法
        //和XiaoGang.XiaoGangListenToXiaoMing方法
        xiaoMing.Invoke(weather);

    }
}

運(yùn)行結(jié)果為

下雨了!小明收衣服了!
下雨了!小剛收衣服了!

注意事項(xiàng):

在使用Delegate子類時(shí),需要用如下代碼進(jìn)行初始化

//方法一 
XiaoMing xiaoMing; 
xiaoMing=Me.MeListenToXiaoMing;
//方法二
XiaoMing xiaoMing=Me.MeListenToXiaoMing;

//錯(cuò)誤示范
XiaoMing xiaoMing;
xiaoMing+=Me.MeListenToXiaoMing;

3.事件(event)與委托配合

當(dāng)你和小剛為小明的靠譜感嘆時(shí),天氣變化無常的季節(jié)結(jié)束了,你們不再需要小明通知你們收放衣服了.

你們又有了新的需求----你喜歡在陰天運(yùn)動(dòng),但是小剛喜歡在晴天運(yùn)動(dòng),于是你們請(qǐng)小明吃了一頓飯,請(qǐng)求他在陰天通知你運(yùn)動(dòng),在晴天通知小剛運(yùn)動(dòng),這樣的話你們就不用在收到陰天和晴天的消息時(shí)花費(fèi)精力自行判斷要不要運(yùn)動(dòng)了.

以下是這次委托的代碼,小明將會(huì)根據(jù)不同情況通知不同的人

//好朋友小明類
class XiaoMing
{
    //定義一個(gè)繼承自Delegate類的委托子類,就像是呼叫是人們通訊的方法
    //而小明的呼叫是繼承自呼叫的子類
    public delegate void CallTFirends();


    //以下是事件,是一個(gè)用于觸發(fā)不同委托的字段
    //這是委托你去運(yùn)動(dòng)的字段
    public  event CallTFirends CallMe;

    //這是委托小剛?cè)ミ\(yùn)動(dòng)的字段
    public event CallTFirends CallXiaoGang;
    
    
    
    //好心的小明用下面的方法時(shí)時(shí)關(guān)注天氣
    public void LookForWeather(string weather)
    {
        if (weather == "Cloudy")
        {
            //與下方的CallXiaoMing?.Invoke();具有相同功能
            //即防止小明小剛還沒通知喜歡哪種運(yùn)動(dòng)天氣時(shí)進(jìn)行提醒
            //防止在event還沒注冊(cè)時(shí)就被調(diào)用
            if (CallMe != null)
            {
                CallMe.Invoke();
            }
        }
        else if(weather == "Sunny")
        {
            CallXiaoGang?.Invoke();
        }

    }

}


//你的類
class Me
{
    //你收到小明的信號(hào)會(huì)調(diào)用以下方法去運(yùn)動(dòng)
    public static void MeListenToXiaoMing()
    {
       Console.WriteLine("小明運(yùn)動(dòng)啦!");
    }
}


//小剛的類
class XiaoGang
{

    //小剛收到小明的信號(hào)會(huì)調(diào)用以下方法去運(yùn)動(dòng)
    public static void XiaoGangListenToXiaoMing()
    {
        Console.WriteLine("小剛運(yùn)動(dòng)啦!");
    }
}

class Program
{
    static void Main(string[] args)
    {

        XiaoMing xiaoMing = new XiaoMing();
        //天氣為陰天
        string weather = "Cloudy";

        //你注冊(cè)了callMe的事件,意味通知小明在陰天通知你去運(yùn)動(dòng)
        xiaoMing.CallMe += Me.MeListenToXiaoMing;
        //小剛注冊(cè)了XiaoGang.XiaoGangListenToXiaoMing事件,意味通知小明在晴天通知小剛?cè)ミ\(yùn)動(dòng)
        xiaoMing.CallXiaoGang += XiaoGang.XiaoGangListenToXiaoMing;

        //小明觀察天氣并且提醒對(duì)應(yīng)的人去運(yùn)動(dòng)
        xiaoMing.LookForWeather(weather);
       

    }
}

運(yùn)行結(jié)果為

小明運(yùn)動(dòng)啦!

細(xì)節(jié)提示:

1.事件只能在聲明它的類中被觸發(fā)(即例子中在XiaoMing類種才能觸發(fā)),在聲明它的類之外只能訂閱和取消訂閱。

2.事件的一大作用是方便由聲明Delegate的類集中管理而不用每個(gè)類自行判斷傳輸過來的信號(hào),如你和小剛不用自行判斷傳來的天氣適合做什么只需要在收到消息后去運(yùn)動(dòng)即可.文章來源地址http://www.zghlxwxcb.cn/news/detail-411027.html

到了這里,關(guān)于C#中的委托(Delegate)和事件 (Event)詳解與使用范例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C#進(jìn)階】C#中的委托、事件、回調(diào)函數(shù)、匿名函數(shù)和lambda表達(dá)式

    委托是一種類型,它可以存儲(chǔ)對(duì)一個(gè)或多個(gè)方法的引用。它類似于C/C++中的函數(shù)指針,允許您將方法作為參數(shù)傳遞、存儲(chǔ)和調(diào)用。 寫法: delegate return_type delegate_name( ); return_type :表示委托所引用方法的返回類型。 delegate_name :表示委托的名稱。 parameters :表示委托所引用方法

    2024年02月06日
    瀏覽(21)
  • 【unity小技巧】委托(Delegate)的基礎(chǔ)使用和介紹

    在Unity中,委托( Delegate )是一種用于處理方法回調(diào)的特殊類型。它允許您將方法作為參數(shù)傳遞給其他方法,并在需要時(shí)調(diào)用這些方法。 委托在游戲開發(fā)中非常有用?

    2024年02月15日
    瀏覽(23)
  • UE4/5C++:Delegate(委托or代理?)的使用

    UE4/5C++:Delegate(委托or代理?)的使用

    目錄 DECLARE的使用 單播: 綁定UObject 綁定 調(diào)用 無參調(diào)用 解除綁定: 綁定Lambda表達(dá)式: 綁定c++原生的c++類的函數(shù): 綁定共享指針: 綁定靜態(tài)函數(shù): 綁定線程安全的共享指針: 綁定一個(gè)Function方法: 多播 動(dòng)態(tài)單播代理: ?用在藍(lán)圖上: 在c++中如何綁定: ?動(dòng)態(tài)多播代理 ?

    2024年02月07日
    瀏覽(21)
  • 【C#學(xué)習(xí)筆記】委托與事件 (從觀察者模式看C#的委托與事件)

    【C#學(xué)習(xí)筆記】委托與事件 (從觀察者模式看C#的委托與事件)

    轉(zhuǎn)載請(qǐng)注明出處:??https://blog.csdn.net/weixin_44013533/article/details/134655722 作者:CSDN@|Ringleader| 主要參考: 委托(C# 編程指南) 事件介紹 C# 中的委托和事件簡(jiǎn)介 Delegate 類 Exploring the Observer Design Pattern微軟技術(shù)文章翻譯 委托是一種 引用類型 ,表示對(duì)具有特定參數(shù)列表和返回類型

    2024年02月04日
    瀏覽(57)
  • c# 事件與委托

    //在C#中, 事件是一種特殊的委托 ,它允許對(duì)象通知其他對(duì)象發(fā)生了某個(gè)特定的事件。 //事件通常用于GUI應(yīng)用程序中,例如當(dāng)用戶單擊按鈕時(shí),按鈕控件會(huì)引發(fā)Click事件, //然后其他對(duì)象可以訂閱該事件并執(zhí)行相應(yīng)的操作。 //以下是一個(gè)簡(jiǎn)單的示例,演示如何在C#中使用事件和

    2024年02月06日
    瀏覽(25)
  • 委托與事件(一)——C#版本

    委托與事件(一)——C#版本

    ??委托是對(duì) 函數(shù)的封裝 ,可以當(dāng)作給方法的特征指定一個(gè)名稱。而事件則是 委托的一種特殊形式 ,當(dāng)發(fā)生有意義的事情時(shí),事件對(duì)象處理通知過程。 ??委托是一種引用方法的類型。一旦為委托分配了方法,委托將與該方法具有 完全相同的行為 。 ??用例子來說明為

    2023年04月09日
    瀏覽(42)
  • C#委托和事件簡(jiǎn)單復(fù)習(xí)

    太久沒用了,簡(jiǎn)單的復(fù)習(xí)一下 快速過一遍語(yǔ)法使用 1.定義一個(gè)委托類型 只需要在聲明的前面加上delegate,其他的就跟聲明一個(gè)方法(函數(shù))類似 2.使用剛剛聲明的委托 需要定義一個(gè)返回值跟參數(shù)與我們剛剛定義的委托一致 3.然后聲明一個(gè)SayHello類型(委托)的變量 把

    2024年02月14日
    瀏覽(22)
  • C#學(xué)習(xí),委托,事件,泛型,匿名方法

    目錄 委托 聲明委托 實(shí)例化委托 委托的多播 委托的用途 事件 通過事件使用委托 聲明事件 泛型 泛型的特性 泛型方法 泛型的委托 匿名方法 編寫匿名方法的語(yǔ)法 類似于指針,委托是存有對(duì)某個(gè)方法的引用的一種引用類型變量,引用可以在運(yùn)行時(shí)被改變。特別用于實(shí)現(xiàn)事件和

    2024年02月12日
    瀏覽(24)
  • C#學(xué)習(xí)筆記8:接口、委托、事件

    C#學(xué)習(xí)筆記8:接口、委托、事件

    今日繼續(xù)我的C#學(xué)習(xí)之路,今日學(xué)習(xí)接口、委托、事件,文章從實(shí)踐出發(fā)學(xué)習(xí)這三個(gè)設(shè)計(jì)理念,并提供完整源碼 目錄 1、接口(多重繼承): 代碼: 運(yùn)行結(jié)果: 2、委托(方法的代理/函數(shù)指針): 創(chuàng)建控制臺(tái)程序?qū)崿F(xiàn)委托: 遇到的報(bào)錯(cuò)及解決: 修改后的代碼: 運(yùn)行結(jié)果: 3、

    2024年04月15日
    瀏覽(30)
  • C#事件event

    C#事件event

    事件模型的5個(gè)組成部分 事件擁有者(event source)(類對(duì)象)(有些書將其稱為事件發(fā)布者) 事件成員(event)(事件擁有者的成員)(事件成員就是事件本身,事件不會(huì)主動(dòng)發(fā)生,其只會(huì)在事件擁有者的內(nèi)部邏輯的觸發(fā)下發(fā)生。) 事件響應(yīng)者(event subscriber)(類對(duì)象)(有

    2024年02月09日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包