簡體   English   中英

我什么時候在 asp.net 中使用委托?

[英]When would I use a delegate in asp.net?

我一直在尋找一種方法來使用我能使用的所有工具,並讓自己超越我所處的位置。 但是,盡管我讀過很多關於委托的內容,但我永遠找不到使用它們的地方(比如接口、Generics 和很多東西,但我離題了。)我希望有人能告訴我他們何時以及如何使用委托在web編程 asp.net c#(2.0 及以上)。

謝謝,如果 Stack Overflow 有問題,請告訴我。

bdukes 對事件的看法是正確的。 但您不僅限於將委托與事件一起使用。

研究經典的觀察者模式以獲取更多關於使用委托的示例。 模式上的一些文本指向事件 model,但從原始學習的角度來看,您不必使用事件。

要記住的一件事:委托只是另一種可以使用和傳遞的類型,類似於您的原始類型,例如“int”。 就像“int”一樣,委托具有自己的特殊特征,當您使用委托類型時,您可以在編碼中對其進行操作。

要真正了解該主題以及其中一些更高級和詳細的方面,請獲取 Joe Duffy 的書.NET Framework 2.0

好吧,每當您處理事件時,您都在使用委托。

首先回答你的第二個問題,我認為這對 StackOverflow 來說是一個很好的問題!

第一個例子是排序。 List 上的 Sort() 方法需要一個委托來進行排序,Find() 方法也是如此。 我不太喜歡在數據庫中進行排序,所以我喜歡在我的結果集上使用 Sort()。 畢竟,列表的順序(通常)更多是 UI 問題,而不是業務規則問題。

編輯:我已將我在數據庫之外排序的原因添加到此處的適當問題中。

編輯:排序例程中使用的比較 function 是一個委托。 因此,如果您使用 .Sort(Comparison(T)) 方法對 List 進行排序,則傳遞給排序 function 的 Comparison(T) 方法是一個委托。 請參閱 .Sort(Comparison(T))文檔

我想到的另一個快速示例是使用 Rhino Mocks 進行單元測試。 你可以用 Rhino Mocks 做的很多事情都利用了委托和 lambda 表達式。

每當您知道要執行某些操作時,都可以使用委托,但該操作的詳細信息將取決於具體情況。

除其他外,我們將委托用於:

  • 排序和過濾,特別是如果用戶可以在不同的排序/過濾標准之間進行選擇
  • 簡化代碼。 例如,一個較長的過程,開始和結束總是相同的,但中間有一點點不同。 我沒有在中間有一個難以閱讀的 if 塊,而是為整個過程提供了一種方法,並為中間位傳遞了一個委托(Action)。
  • 我的表示層中有一個非常有用的 ToString 方法,它將任何東西的集合轉換為逗號分隔的列表。 方法參數是一個 IEnumerable 和一個 Func 委托,用於將集合中的每個 T 轉換為字符串。 它同樣適用於按名字將用戶串在一起或按 ID 列出項目。

asp.net 沒有什么特別之處與代表相關(除了使用異步內容時的注意事項,這是一個完全不同的問題),所以我將向您指出其他問題:

委托用法:業務應用程序

我在哪里使用代表?

另一個例子是發布用戶控件的事件。

例如。

// In your user control
public delegate void evtSomething(SomeData oYourData);
public event evtSomething OnSomething;

// In the page using your user control
ucYourUserControl.OnSomething += ucYourUserControl_OnSomething;

// Then implement the function
protected void ucYourUserControl_OnSelect(SomeData oYourData)
{
   ...
}

最近我使用代表來“委托”檢查權限。

公共功能檢查權限;

This way, the CheckPermission function can be shared by various controls or classes, say it in a static class or a utilities class, and still be managed centralized, avoiding also Interface explossion; 只是一個想法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM