Подтвердить что ты не робот

Динамически присваивать метод/метод переменной

Итак, у меня есть 2 класса с именами A и B.

A имеет метод "public void Foo()".

B имеет несколько других методов.

Мне нужна переменная в классе B, которой будет присвоен метод Foo() класса A. Затем эта переменная должна быть "выполнена" (= > , поэтому она должна выполнить назначенный метод класса A).

Как это сделать?

4b9b3361

Ответ 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".