2010-08-02 94 views
1

是否有可能有一个通用的方法,需要委托(?)的方法或只是一个代码块作为参数传入?假设我有AddJob()和AddJob2()。我希望这些传入一个通用的方法,运行一些骨架代码,但然后执行AddJob或AddJob2。通用方法将委托传递给方法?

谢谢!

编辑:
我在.net 2.0上。

回答

8

肯定的:

public void AddJob(string jobName) { ... } 
public void AddJob2(string jobName) { ... } 

public void RunAddJob(Action addJob) 
{ 
    ... 
    addJob(); 
} 

static void Main() 
{ 
    RunAddJob(() => AddJob("job1")); 
    RunAddJob(() => AddJob2("job2")); 
} 

编辑:非通用System.Action在.NET中3.5是新的。对于.NET 2.0,您可以假设:

public delegate void Action(); 
+0

如果您不知道传递给函数AddJob和AddJob2的参数是否可能不提供jobName? 谢谢 – adamwtiko 2010-08-02 14:21:45

+0

@Adam如果我理解正确,我可以修改答案来演示 – 2010-08-02 14:28:49

+0

...虽然示例中的RunAddJob方法不再需要是通用的,如果我这样做。 – 2010-08-02 14:30:13

5

大部分Enumerable类(对于LINQ)都是这样工作的。

T MyFunc<T>(T t, Func<T, T> addjob) 
{ 
    return addjob(t); 
} 


MyFunc(5, i => i + 10);