2009-03-06 10 views
0

Ich habe Delegaten beim Entwerfen von Win Forms in .NET verwendet ... d. H. Ziehen/Ablegen einer Schaltfläche, Doppelklick und Ausfüllen des myButton_click-Ereignisses. Ich möchte verstehen, wie benutzerdefinierte Delegaten in C# erstellt und verwendet werden.Wie werden benutzerdefinierte Delegaten in C# verwendet und erstellt?

Wie werden benutzerdefinierte Delegaten in C# verwendet und erstellt?

Antwort

8

Ich schlage vor, ein Tutorial zu diesem Thema zu lesen.

Grundsätzlich erklären Sie Delegattyp:

public delegate void MyDelegate(string message); 

Dann können Sie entweder zuweisen und es direkt anrufen:

MyDelegate = SomeFunction; 
MyDelegate("Hello, bunny"); 

Oder Sie ein Ereignis erstellen:

public event MyDelegate MyEvent; 

Dann Sie können einen Ereignishandler von außen wie folgt hinzufügen:

SomeObject.MyEvent += SomeFunction; 

Visual Studio ist dabei hilfreich. Nachdem Sie das + = eingegeben haben, drücken Sie einfach Tab-Tab und es wird der Handler für Sie erstellt.

Dann können Sie das Ereignis aus dem Inneren des Objekts Feuer:

if (MyEvent != null) { 
    MyEvent("Hello, bunny"); 
} 

, dass die grundlegende Verwendung ist.

+0

+1, vergessen Sie einfach den "delegieren" Schlüsselwort auf den ersten Code Linie. – ybo

+0

Hoppla. Danke für das Aufzeigen. – OregonGhost

1
public delegate void testDelegate(string s, int i); 

private void callDelegate() 
{ 
    testDelegate td = new testDelegate(Test); 

    td.Invoke("my text", 1); 
} 

private void Test(string s, int i) 
{ 
    Console.WriteLine(s); 
    Console.WriteLine(i.ToString()); 
} 
1

Für breite Antwort überprüfen Sie diese article von mohamad halabi. Für kürzere Antwort überprüfen Sie diese leicht modifizierten Beispiel aus dem c:/Programme/Microsoft Visual Studio 9.0/Samples/1033/Ordner ...

using System; 
using System.IO; 


namespace DelegateExample 
{ 
    class Program 
    { 
    public delegate void PrintDelegate (string s); 

    public static void Main() 
    { 
     PrintDelegate delFileWriter = new PrintDelegate (PrintFoFile); 
     PrintDelegate delConsoleWriter = new PrintDelegate (PrintToConsole); 
     Console.WriteLine ("PRINT FIRST TO FILE by passing the print delegate -- DisplayMethod (delFileWriter)"); 

     DisplayMethod (delFileWriter);  //prints to file 
     Console.WriteLine ("PRINT SECOND TO CONSOLE by passing the print delegate -- DisplayMethod (delConsoleWriter)"); 
     DisplayMethod (delConsoleWriter); //prints to the console 
     Console.WriteLine ("Press enter to exit"); 
     Console.ReadLine(); 

    } 

    static void PrintFoFile (string s) 
    { 
     StreamWriter objStreamWriter = File.CreateText(AppDomain.CurrentDomain.BaseDirectory.ToString() + "file.txt"); 
     objStreamWriter.WriteLine (s); 
     objStreamWriter.Flush(); 
     objStreamWriter.Close(); 
    } 


    public static void DisplayMethod (PrintDelegate delPrintingMethod) 
    { 
     delPrintingMethod("The stuff to print regardless of where it will go to") ; 
    } 

    static void PrintToConsole (string s) 
    { 
     Console.WriteLine (s);  
    } //eof method 
    } //eof classs 
} //eof namespace 
Verwandte Themen