11
A
回答
33
public delegate bool Foo(DateTime timestamp);
這是如何聲明與你描述的簽名代表參考。所有代表都可能是多播,他們只需要初始化。如:
public bool IsGreaterThanNow(DateTime timestamp)
{
return DateTime.Now < timestamp;
}
public bool IsLessThanNow(DateTime timestamp)
{
return DateTime.Now > timestamp;
}
Foo f1 = IsGreaterThanNow;
Foo f2 = IsLessThanNow;
Foo fAll = f1 + f2;
調用fAll
,在這種情況下,將通話雙方IsGreaterThanNow()
和IsLessThanNow()
。
這不能做的是讓您訪問每個返回值。你得到的只是返回的最後一個值。如果你想檢索每一個值,你將不得不手動處理組播,就像這樣:
List<bool> returnValues = new List<bool>();
foreach(Foo f in fAll.GetInvocationList())
{
returnValues.Add(f(timestamp));
}
2
class Test
{
public delegate bool Sample(DateTime dt);
static void Main()
{
Sample j = A;
j += B;
j(DateTime.Now);
}
static bool A(DateTime d)
{
Console.WriteLine(d);
return true;
}
static bool B(DateTime d)
{
Console.WriteLine(d);
return true;
}
}
3
任何代表可以是一個多播委託
delegate bool myDel(DateTime s);
myDel s = someFunc;
s += someOtherFunc;
委託的一個有用的性質對象 是,它們可以被分配給一個 代表實例要多播 使用+運營商。代表組成的 代表調用它組成的兩個代表 。只有代表 的代表可以組成同一類型。
編輯: 甲delagate有一個方法GetInvocationList返回與所連接的方法的列表。
這是一個關於Delegate invocation
foreach(myDel d in s.GetInvocationList())
{
d();
}
0
我正在磕磕絆絆地遇到同樣的問題。我搜索並發現這在MSDN。
http://msdn.microsoft.com/en-us/library/2e08f6yc(v=VS.100).aspx
上有代表
- BeginInvoke的兩種方法
- EndInvoke會
的鏈接描述了這些詳細地說,與代碼示例。
我們可以掛鉤到這些方法來處理代表的返回值。
相關問題
- 1. Java布爾型返回類型
- 2. 返回類型Java中的布爾值
- 3. 與布爾返回類型可選封
- 4. 返回類型Pthread使用C++創建
- 5. 創建布爾面具
- 6. PHP - 創建類型的數組布爾
- 7. 是C中允許的布爾返回類型嗎?
- 8. Objective-C:具有塊返回類型的塊的類型簽名
- 9. MySQL布爾型返回布爾型查詢?
- 10. 具有多種返回類型的類?
- 11. 類返回類型創建方法
- 12. 創建在Python中返回布爾值的迴文函數
- 13. 具有C連接能夠返回類類型的函數?
- 14. 布爾類型
- 15. C#泛型有限的返回類型
- 16. 返回布爾值
- 17. WCFDataService返回布爾
- 18. lambda返回布爾
- 19. - (布爾)不返回
- 20. 如何在返回布爾型
- 21. Crystal Report Formular總是返回布爾型
- 22. 返回具有協變類型的immutable.Map
- 23. 如何從具有返回類型
- 24. 創建泛型類來返回表
- 25. 創建Haxe extern,返回類型
- 26. 窗體sql返回布爾到C#
- 27. C#時間布爾總是返回false
- 28. C++布爾函數返回56
- 29. 返回布爾值到C-環境
- 30. C++返回布爾總是假?
調用它時,組合委託的返回值會發生什麼?是否有某種數組可以讓你在被調用後檢查返回值?我以前使用過多播委託,但從未想過他們有返回類型。 – AaronLS 2009-08-31 08:57:53