So rufen Sie delegieren von string, die in C#?

ist es möglich, rufen Sie einen Delegaten in einer Variablen gespeichert, indem Sie die variable name (als string)? ich denke, ich hätte zu verwenden, reflection-Mechanismus, aber ich bin nicht immer überall

Beispiel-code:

class Demo {
  public delegate int DemoDelegate();

  private static int One() {
    return 1;
  }
  private static void CallDelegate(string name) {
    //somehow get the value of the variable with the name
    //stored in "name" and call the delegate using reflection
  }
  private static void CallDelegate(string name, DemoDelegate d) {
    d();
  }
  static void main(string[] args) {
    DemoDelegate one = Demo.One;
    CallDelegate(one);
    //this works, but i want to avoid writing the name of the variable/delegate twice:
    CallDelegate("one", one);
  }

}

ist das überhaupt möglich? wenn ja, wie? wenn nicht, dann muss ich das mit der zweiten form, Pech

  • Mit DemoDelegate d im zweiten überlastung völlig Niederlagen der Zweck der string name, nicht wahr?
  • ja, das ist der Grund, warum ich es vermeiden wollen (in meinem code, ich möchte speichern Sie den Namen der Variablen zu Console.Out.WriteLine() es später)
  • Es gibt eine Reihe von grundlegenden Fehler Sie hier. One() ist eine Instanz-Methode für ein-und greifen Sie auf this aus, die innerhalb einer statischen Methode. Was wollen Sie anrufen? Die Instanz-Methode One() oder der Delegierte in der lokalen variable gespeichert, die in main(), one?
  • wenn Sie nur wollen, speichern den Namen der Variablen ein, warum man nicht einfach "dabei.delegateMember.Methode.Name"? das macht mehr Sinn für mich, als das zu tun dodgy Reflexion hacks?
  • vielen Dank für die Erwähnung, es behoben. und ich möchte, dass Sie den Delegaten aufrufen in der lokalen variable gespeichert "one" (Kleinbuchstaben)
  • Vielleicht vermisse ich den Punkt hier, aber Sie haben bereits eine Instanz des Delegaten in one. Sie brauchen nicht Ihren Namen in der Lage sein, um es aufzurufen. Wenn Sie benötigen, um Zugang zu den One() Methode aus einer anderen Klasse, das wäre ein anderer Fall ist, jedoch.
  • dies ist nur Beispiel-code, um deutlich zu machen möchte ich nennen, einen Delegierten (und nicht eine Methode direkt)
  • Ich änderte meine Antwort zu schreiben, der name der Variablen, an die Konsole, später, als Sie vorgeschlagen, in einem früheren Kommentar.

InformationsquelleAutor knittl | 2011-05-15
Schreibe einen Kommentar