Reputation: 777
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
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
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