C # ссылки на методы через переменные? - PullRequest
3 голосов
/ 12 марта 2012

Допустим, у меня есть метод

public static void Blah(object MyMethod) { // i dont know what to replace object with
MyMethod; // or however you would use the variable
}

, поэтому мне нужно иметь возможность ссылаться на метод через переменную

Ответы [ 2 ]

6 голосов
/ 12 марта 2012

Вы ищете делегата .

public delegate void SomeMethodDelegate();

public void DoSomething()
{
    // Do something special
}

public void UseDoSomething(SomeMethodDelegate d)
{
    d();
}

Использование:

UseDoSomething(DoSomething);

Или используя лямбда-синтаксис (если DoSomething был Hello World):

UseDoSomething(() => Console.WriteLine("Hello World"));

Для делегатов также доступен сокращенный синтаксис в виде Action и Func типов:

public void UseDoSomething(Action d)

И если вам нужно вернуть значение от вашего делегата (например, int в моем примере), вы можете использовать:

public void UseDoSomething2(Func<int> d)

ПРИМЕЧАНИЕ: Действие и Func обеспечивают общие перегрузки, которые позволяют передавать параметры.

4 голосов
/ 12 марта 2012

.NET Framework имеет несколько встроенных типов делегатов, которые облегчают эту задачу. Поэтому, если MyMethod принимает параметр string, вы можете сделать это:

public static void Blah(Action<string> MyMethod) { 
    MyMethod; 
} 

, если требуется два int с и возвращает long, вы должны сделать:

public static void Blah(Func<int, int, long> MyMethod) { 
    MyMethod; 
} 

Существуют версии Action<> и Func<> с различным количеством параметров типа, которые можно указать при необходимости.

...