Ссылка на функцию в переменной? - PullRequest
6 голосов
/ 20 декабря 2010

Скажи, у меня есть функция. Я хочу добавить ссылку на эту функцию в переменной.

Так что я мог бы вызвать функцию 'foo (bool foobar)' из переменной 'bar', как если бы это была функция. НАПРИМЕР. 'Бар (Foobar).

Как?

Ответы [ 4 ]

18 голосов
/ 20 декабря 2010

Похоже, вы хотите сохранить Func в переменной для последующего использования. Взгляните на примеры здесь :

using System;

public class GenericFunc
{
   public static void Main()
   {
      // Instantiate delegate to reference UppercaseString method
      Func<string, string> convertMethod = UppercaseString;
      string name = "Dakota";
      // Use delegate instance to call UppercaseString method
      Console.WriteLine(convertMethod(name));
   }

   private static string UppercaseString(string inputString)
   {
      return inputString.ToUpper();
   }
}

Посмотрите, как метод UppercaseString сохраняется в переменной с именем convertMethod, которая затем может быть вызвана: convertMethod(name).

1 голос
/ 20 декабря 2010

Использование делегатов

    void Foo(bool foobar)
    {
/* method implementation */
    }

Использование Action Делегат

Public Action<bool> Bar;
Bar = Foo;

Вызов функции;

bool foobar = true;
Bar(foobar);
1 голос
/ 20 декабря 2010

Вы ищете Делегатов ?

0 голосов
/ 20 декабря 2010

Вам необходимо знать сигнатуру функции и создать делегат .

Есть готовые делегаты для функций, которые возвращают значение и для функций, имеющих тип возврата void . Обе предыдущие ссылки указывают на универсальные типы, которые могут принимать до 15 или около того аргументов типа (таким образом, могут служить для функций, принимающих столько аргументов).

Если вы намереваетесь использовать ссылки на функции в области, большей локальной области, вы можете рассмотреть определение ваших собственных пользовательских делегатов . Но большую часть времени Action и Func делают очень хорошо.

Обновление:

Посмотрите на этот вопрос относительно выбора между определением ваших собственных делегатов или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...