ホームページ > バックエンド開発 > C#.Net チュートリアル > C#デリゲートとイベントの説明

C#デリゲートとイベントの説明

高洛峰
リリース: 2016-12-14 11:17:50
オリジナル
1327 人が閲覧しました

序文から、コミッションとイベントの重要性についてはある程度理解していただけると思いますが、まだ曖昧な部分もありますが、私の日常的なシリーズからこれらの概念をわかりやすく説明します。まず、代表について話しましょう。文字通り理解すれば、すべての中国人がこの意味を知っているはずです。ただし、たとえば、Xiao Ming が Xiao Zhang にチケットを買うように頼みます。

しかし、私たちのプログラミングの世界でも、それはそれほど単純なのでしょうか?もちろん、OO とは何ですか? OO は現実世界の抽象化です。申し訳ありませんが、話が行き過ぎています...

それでは、本題に移りましょう。学生は退屈することはありません。インターネット上で中国語と英語の GreetingPeople の例をご覧ください。

テレンス経由で C# に接続構文

public delegate void BugTicketEventHandler();
ログイン後にコピー

out . Cultivation]

これで終わりです。委任です。とても簡単です。通常の方法と何が違うのか見てみましょう。

public void BuyTicket()
{   
 方法体
 }
ログイン後にコピー

違いはわかりますか? 現実の世界では、デリゲートは単なるコマンドであり、他の誰かが作業を行います。しかし、プログラミングの世界では、デリゲートは各メソッドのアドレスを保存するだけで、デリゲート自身は何も行いません。

それでは、シャオミンがシャオ・チャンにチケットを買うように頼んだ実際のシーンを、プログラムの世界にどのように反映できるでしょうか?

代码 

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->//小张类
    public class MrZhang
    {
        //其实买车票的悲情人物是小张
        public static void BuyTicket()
        {
            Console.WriteLine("NND,每次都让我去买票,鸡人呀!");
        }
    }

    //小明类
    class MrMing
    {
        //声明一个委托,其实就是个“命令”
        public delegate void BugTicketEventHandler();

        public static void Main(string[] args)
        {
            //这里就是具体阐述这个命令是干什么的,本例是MrZhang.BuyTicket“小张买车票”
            BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket);

            //这时候委托被附上了具体的方法
            myDelegate();
            Console.ReadKey();
        }
    }
ログイン後にコピー

BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket);

これはデリゲートの宣言メソッドです、BugTicketEventHandler (委任されたメソッド); 委任されたコンストラクターが空ではないため、委任されたメソッドを追加する必要があります。

注: デリゲートのパラメーターと戻り値の型は、委任するメソッドと一致している必要があります。例:

public delegate void BugTicketEventHandler();


public static void BuyTicket()
{
Console.WriteLine (「NND、毎回チケット買わせてよ、チキンマン!」);
}

学生の皆さん、これを理解して少し休憩してください:

実際、現実の世界では、シャオミンがシャオ・チャンにチケットを買うように頼んだ後、映画のチケットを持ってくるように頼むかもしれません

そして、私たちのプログラムの世界では、次のような表現になります:

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->//小张类
    public class MrZhang
    {
        //其实买车票的悲情人物是小张
        public static void BuyTicket()
        {
            Console.WriteLine("NND,每次都让我去买票,鸡人呀!");
        }

        public static void BuyMovieTicket()
        {
            Console.WriteLine("我去,自己泡妞,还要让我带电影票!");
        }
    }

    //小明类
    class MrMing
    {
        //声明一个委托,其实就是个“命令”
        public delegate void BugTicketEventHandler();

        public static void Main(string[] args)
        {
            //这里就是具体阐述这个命令是干什么的,本例是MrZhang.BuyTicket“小张买车票”
            BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.BuyTicket);

            myDelegate += MrZhang.BuyMovieTicket;
            //这时候委托被附上了具体的方法
            myDelegate();
            Console.ReadKey();
        }
    }
ログイン後にコピー

実際には、プログラムに myDelegate += MrZhang.BuyMovieTicket;

を追加しました
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート