Heim > Backend-Entwicklung > C#.Net-Tutorial > C#-Delegierter und Ereigniserklärung

C#-Delegierter und Ereigniserklärung

高洛峰
Freigeben: 2016-12-14 11:17:50
Original
1345 Leute haben es durchsucht

Aus dem Vorwort sollten Sie ein gewisses Verständnis für die Bedeutung von Aufträgen und Ereignissen gewonnen haben. Auch wenn wir uns jetzt noch vage darüber äußern können, werde ich diese Konzepte anhand meiner umgangssprachlichen Reihe leicht verständlich machen. Lassen Sie uns zunächst über „Anvertrauen“ sprechen. Im wahrsten Sinne des Wortes sollten alle Chinesen diese Bedeutung kennen, es sei denn, die beiden chinesischen Schriftzeichen für „Anvertrauen“ sind unbekannt. Beispielsweise beauftragt Xiao Zhang, ein Ticket zu kaufen.

Aber ist es in unserer Programmierwelt so einfach? Natürlich, was ist OO? OO ist die Abstraktion der realen Welt. Tut mir leid, ich gehe zu weit ... Dann kommen wir gleich zur Sache Auf den Punkt gebracht. Wenn Schüler es nicht als störend empfinden, können Sie sich im Internet das GreetingPeople-Beispiel auf Chinesisch und Englisch ansehen.

Erstens ist die C#-Syntax

„delegate“ ist das Schlüsselwort, [Hinweis: EventHandler ist ein Benennungsstandard für Microsoft C#, der die Delegation deklariert Möglich, diese Benennungsgewohnheit sollte so schnell wie möglich entwickelt werden.】
public delegate void BugTicketEventHandler();
Nach dem Login kopieren

Das ist es, das ist Delegation, so einfach ist das, mal sehen, was der Unterschied zu unserer normalen Methode ist?

Kennen Sie den Unterschied? Im wirklichen Leben ist ein Delegat nur ein Befehl, und jemand anderes erledigt die Arbeit. In der Programmierwelt speichert der Delegat jedoch nur die Adresse jeder Methode selbst macht nichts.
public void BuyTicket()
{   
 方法体
 }
Nach dem Login kopieren

Dann nehmen wir die reale Szene, in der Xiao Ming Xiao Zhang anvertraut hat, ein Ticket zu kaufen. Wie kann sich das in der Programmwelt widerspiegeln?

BugTicketEventHandler myDelegate = new BugTicketEventHandler(MrZhang.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();
        }
    }
Nach dem Login kopieren

Dies ist die Deklarationsmethode des Delegaten, BugTicketEventHandler (Methode des Delegaten); weil der Delegat Der Konstruktor ist nicht leer.

Hinweis: Die Parameter und der Rückgabetyp des Delegaten müssen mit der spezifischen Methode übereinstimmen, die Sie delegieren möchten, zum Beispiel:

public delegate void BugTicketEventHandler();

public static void BuyTicket()

{
Console.WriteLine("NND, lass mich jedes Mal Tickets kaufen, Chicken Man!");
}

Studenten, bitte verdauen Sie dies und machen Sie eine Pause. Lassen Sie uns kurz über das Konzept der Delegationskette sprechen:

Tatsächlich ist die Delegationskette auch ganz einfach. Im wirklichen Leben heißt Xiao Ming. Nachdem Sie die Eintrittskarte gekauft haben, können Sie ihn bitten, eine Kinokarte mitzubringen,

und der Ausdruck in unserer Programmwelt lautet:

Tatsächlich haben wir gerade myDelegate + in das Programm aufgenommen = MrZhang.BuyMovieTicket;
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();
        }
    }
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage