Динамически присваивать метод/метод переменной
Итак, у меня есть 2 класса с именами A и B.
A имеет метод "public void Foo()".
B имеет несколько других методов.
Мне нужна переменная в классе B, которой будет присвоен метод Foo() класса A.
Затем эта переменная должна быть "выполнена" (= > , поэтому она должна выполнить назначенный метод класса A).
Как это сделать?
Ответы
Ответ 1
Рид дал тебе правильный ответ. Также стоит отметить, что вы можете использовать другие подписи делегатов помимо Action.
Существуют такие общие версии, как Action<T>
(один аргумент), Action<T1, T2>
(два аргумента) и т.д.
Кроме того, если ваш метод имеет тип возврата, проверьте Func<T, TResult>
.
Или, конечно, вы можете определить свой собственный тип делегата.
Ответ 2
Похоже, вы хотите использовать делегат здесь.
В принципе, вы можете добавить в классе "B":
class B
{
public Action TheMethod { get; set; }
}
class A
{
public static void Foo() { Console.WriteLine("Foo"); }
public static void Bar() { Console.WriteLine("Bar"); }
}
Затем вы можете установить:
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...
Это выведет "Foo", затем "Bar".