2017-06-14 1 views
-2

Wie ich Funktion als Parameter einer anderen Funktion und Zuweisen zu einem DelegatenWie übergibt man einer Funktion func als Argument an ein anderes und weist dieses Argument dann einer Delegate-Variablen zu?

public class myClass 
{ 
    public delegate void myDelegate(double x, string s); 
    //declaration of delegate 
    public void func(double x, string s) 
    { 
     dosomethings... 
    } 
    // what is the declaration of the argument 'Function declaration' 
    public void myFunction('Function declaration' function) 
    { 
     myDelegate deFunc; 
     deFunc = function; 
    } 
    } 
    static void Main(string[] args) 
    { 
     myFunction(func); 
    } 
} 
+3

oder 'myFunction (myDelegate @delegate)'. – HimBromBeere

+1

@EdPlunkett https://dotnetfiddle.net/bNAElH – Toshi

+0

@ Toshi Derp. Vielen Dank. –

Antwort

1

Main ist statisch so ein andere Methode statisch sein sollte auch in diesem Fall verwendet werden kann. Zum Beispiel:

public delegate void myDelegate(double x, string s); 
    //declaration of delegate 
    public static void func(double x, string s) 
    { 
     //dosomethings... 
    } 
    // what is the declaration of the argument 'Function declaration' 
    public static void myFunction(myDelegate function) 
    { 
     myDelegate deFunc; 
     deFunc = function; 
    } 

    static void Main(string[] args) 
    { 
     myFunction(func); 
    } 
+0

Ok es funktioniert. Denkt nach. – rachid

1

Sie entweder die Definition verwenden können Sie bereits in Ihrer Klasse zur Verfügung gestellt:

public void myFunction(myDelegate del) 
{ ... } 

oder die Action-delegate introduces in .NET 3.5, die eine Verknüpfung für einen Delegierten Rückkehr nichts (void):

public void myFunction(Action<double, string> del) 

In letzterem Fall sollte auch deFunc innerhalb Ihrer Methode vom Typ Action<double, string> sein, da Sie das nicht aufübertragen können.

Beachten Sie, dass delegate ein reserviertes Schlüsselwort ist, daher sollten Sie Ihren Parameter in der Methodensignatur anders benennen, z. del oder nur func oder @delegate mit dem Verbatim @ vor

+0

https://dotnetfiddle.net/bNAElH Sind Sie sicher, dass 'Action ' kompiliert wird? – Toshi

Verwandte Themen