nr1
nr1

Reputation: 777

Dynamically assign method / Method as variable

So i have 2 classes named A and B.

A has a method "public void Foo()".

B has several other methods.

What i need is a variable in class B, that will be assigned the Foo() method of class A. This variable should afterwards be "executed" (=> so it should execute the assigned method of class A).

How to do this?

Upvotes: 23

Views: 40847

Answers (2)

JohnD
JohnD

Reputation: 14747

Reed gave you the right answer. It's also worth pointing out that you can use other delegate signatures besides Action.

There are generic versions like Action<T> (one arg), Action<T1, T2> (two args), etc... Also if your method has a return type, check out Func<T, TResult>.

Or of course you can define your own delegate type.

Upvotes: 18

Reed Copsey
Reed Copsey

Reputation: 564363

It sounds like you want to use a delegate here.

Basically, you can add, in class "B":

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

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

You could then set:

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...

This would print out "Foo" then "Bar".

Upvotes: 61

Related Questions