我不知道這是否可能在C#中。但這是我想要做的: 一個接口,它聲明一個方法的完成塊/回調/ lambda /無論你想調用它。看起來很簡單。但是,這是第一次嘗試:C#如何在方法參數列表中聲明lambda或匿名函數類型?
namespace N {
interface MyInterface {
delegate void CompletionBlock();
void doSomething(CompletionBlock completionBlock);
}
}
但接口無法聲明委託。好的,這個怎麼樣?
namespace N {
public delegate void CompletionBlock();
interface MyInterface {
void doSomething(CompletionBlock completionBlock);
}
}
當然可以,但現在說,我聲明另一種類型的CompletionBlock,例如一個參數。我不能調用CompletionBlock類型,因爲它會與上面的類型衝突,如果在相同的名稱空間內。
然後有行動和功能。但即使行動採取一個參數,我不想要參數。所以行動似乎不是一個可行的候選人。真的,我想,是隻要內嵌匿名塊」概念的一種方式,簽名是無效的(無效)事情是這樣的:
namespace N {
interface MyInterface {
void doSomething(typeof(()=>) completionBlock);
}
}
不過Lambda表達式真的沒有在C#中的類型。難道他們至少有簽名? 基本上是沒有解決這個辦法嗎?
在Objective-C,例如,塊型NSBlock的,即使他們的簽名本身是不容易接近,但一個可以創建一種採用具有特定簽名的塊的方法,例如:
- (void)doSomething:(void(^)(void))completionBlock
將是採用無參數,無返回值類型塊的方法,而且你調用該方法,像這樣,例如:
[obj doSomething:^(){your block code}];
有_is_一個[參數的'行動()'委託(HTTP: //msdn.microsoft.com/en-us/library/system.action%28v=vs.110%29.aspx)。你的用法可以嗎? –