2010-08-02 91 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);