簡體   English   中英

是否應該在提升活動的課堂內或在外面宣布代表?

[英]Should a delegate be declared inside the class that will raise the event, or outside?

我已經看到了各種事件處理的例子。 這是一個: 事件樣本

有時我看到在類之外聲明的委托將引發事件(如上面的鏈接),有時在內部( 認為應該聲明它)。

它更有意義,我宣布,將引發該事件的類的事件。 原因是該類將聲明的事件實際上只是輔助方法等的一些糖塗層,它們實際上正在添加,減去和調用委托等。

有沒有最佳做法? 是否有時候你想要在外面聲明委托,有時你想在里面聲明委托? 如果是這樣,應該如何決定做什么?

通常,這些天你創建自己的類派生自EventArgs ,然后只使用EventHandler<TEventArgs> - 不需要創建單獨的委托類型。 因此,不使用AlarmEventHandler ,而是使用EventHandler<AlarmEventArgs> EventArgs派生的類通常應該是頂級的(即非嵌套的)。

我會在外面宣布它們,因為它們也被其他類使用 - 事件的消費者。 如果委托特定於此類,我會將委托保留在與該類相同的文件中。

如果您使用.NET 2.0及更高版本中提供的EventHandler<TEventAgrs>通用版本,則不會出現問題,因為您只需要聲明自定義EventArgs

如果我沒記錯的話,CLR中很少有公共可訪問的嵌套“對象”(classes / structs / delegates / enums)。 因此,代表通常是班級的“外部”。

但是從.NET 3.5開始,一直有使用“泛型”委托( Func<T>Action<T>Predicate<T> )而不是越來越多的不兼容委托的想法。

暫無
暫無

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

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