12 Stimmen

Wie übergibt man Parameter per ref, wenn man eine statische Methode mit reflection aufruft?

Ich rufe eine statische Methode für ein Objekt mit Reflection auf:

MyType.GetMethod("MyMethod", BindingFlags.Static).Invoke(null, new object[] { Parameter1, Parameter2 });

Wie übergibt man Parameter als Referenz und nicht als Wert? Ich nehme an, dass sie standardmäßig als Wert übergeben werden. Der erste Parameter ("Parameter1" im Array) sollte per Referenz übergeben werden, aber ich kann nicht herausfinden, wie man ihn auf diese Weise übergeben kann.

16voto

JaredPar Punkte 699699

Bei einem Referenzparameter (oder out in C#) kopiert Reflection den neuen Wert in das Objektarray an der gleichen Position wie den ursprünglichen Parameter. Sie können auf diesen Wert zugreifen, um die geänderte Referenz zu sehen.

public class Example {
  public static void Foo(ref string name) {
    name = "foo";
  }
  public static void Test() {
    var p = new object[1];
    var info = typeof(Example).GetMethod("Foo");
    info.Invoke(null, p);
    var returned = (string)(p[0]);  // will be "foo"
  }
}

1voto

Samuel Punkte 36701

Wenn Sie anrufen Type.GetMethod und verwenden Sie die BindingFlag von nur BindingFlags.Static wird Ihre Methode nicht gefunden. Entfernen Sie das Flag oder fügen Sie BindingFlags.Public und es wird die statische Methode finden.

public Test { public static void TestMethod(int num, ref string str) { } }

typeof(Test).GetMethod("TestMethod"); // works
typeof(Test).GetMethod("TestMethod", BindingFlags.Static); // doesn't work
typeof(Test).GetMethod("TestMethod", BindingFlags.Static
                                     | BindingFlags.Public); // works

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X