23 Stimmen

Methode dynamisch zuweisen / Methode als Variable

Ich habe also 2 Klassen namens A und B.

A hat eine Methode "public void Foo()".

B hat mehrere andere Methoden.

Was ich brauche, ist eine Variable in Klasse B, der die Methode Foo() der Klasse A zugewiesen wird. Diese Variable soll anschließend "ausgeführt" werden (=> sie soll also die zugewiesene Methode der Klasse A ausführen).

Wie kann man das tun?

60voto

Reed Copsey Punkte 536986

Es klingt, als wollten Sie eine delegieren hier.

Grundsätzlich können Sie in der Klasse "B" hinzufügen:

class B
{
    public Action TheMethod { get; set; }
}

class A
{
    public static void Foo() { Console.WriteLine("Foo"); }
    public static void Bar() { Console.WriteLine("Bar"); }
}

Sie könnten dann einstellen:

B b = new B();

b.TheMethod = A.Foo; // Assign the delegate
b.TheMethod(); // Invoke the delegate...

b.TheMethod = A.Bar;
b.TheMethod(); // Invoke the delegate...

Dies würde "Foo" und dann "Bar" ausgeben.

18voto

JohnD Punkte 13847

Reed hat Ihnen die richtige Antwort gegeben. Es ist auch erwähnenswert, dass Sie neben Action auch andere Delegatensignaturen verwenden können.

Es gibt generische Versionen wie Action<T> (ein Argument), Action<T1, T2> (zwei Argumente), usw... Wenn Ihre Methode einen Rückgabetyp hat, sehen Sie sich auch Func<T, TResult> .

Natürlich können Sie auch Ihren eigenen Delegatentyp definieren.

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