C#通过变量引用方法?

时间:2012-03-12 01:01:01

标签: c# visual-studio winapi variables methods

让我说我有一个方法

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

所以基本上我需要能够通过变量引用一个方法

2 个答案:

答案 0 :(得分:6)

您正在寻找a delegate

public delegate void SomeMethodDelegate();

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

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

用法:

UseDoSomething(DoSomething);

或者使用lambda语法(如果DoSomething是Hello World):

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

还有ActionFunc类型的代表可用的快捷语法:

public void UseDoSomething(Action d)

如果您需要从代理中返回一个值(例如我的示例中的int),您可以使用:

public void UseDoSomething2(Func<int> d)

注意: ActionFunc提供允许传递参数的通用重载。

答案 1 :(得分:4)

.Net框架内置了许多委托类型,这使得这更容易。因此,如果MyMethod采用string参数,您可以执行此操作:

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

如果需要两个int并返回long,您可以这样做:

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

Action<>Func<>的版本具有不同数量的类型参数,您可以根据需要指定这些参数。