簡體   English   中英

為什么sub不能同時實現接口和處理事件?

[英]Why can't a sub implement an interface and handle event at the same time?

為什么sub不能同時實現接口和處理事件?

以下是我的語法錯誤:

Sub MySub() Handles MyButton.Click Implements MyInterface.MyMethod
End Sub

我知道我可以用另一種方法處理這種邏輯,但這不是重點。 我只是想了解這背后的原因。

語法錯誤與語言語法一致,在VB語言規范1的 §9.2.1中:

SubDeclaration :: =
[Attributes] [ProcedureModifier +] SubSignature [HandlesOrImplements] LineTerminator

End Sub StatementTerminator

HandlesOrImplements :: = HandlesClause | ImplementsClause

因此,任何一種方法都只支持一種方法。 該規范沒有(快速查看)包含此限制的基本原理。 為此,您需要與Microsoft的VB語言設計團隊的人員交談。


1這包含在< VSRoot > \\ VB \\ Specifications \\ 1033下的VS安裝中。

我從未見過有關為什么這個決定是由VB.NET團隊做出的詳細討論,但說實話,我很難從OOP設計的角度看看這有什么意義。 事件處理程序方法通常不應該做任何工作。 相反,他們應該呼喚其他方法來進行繁重的工作。 他們調用的另一種方法是實現接口的方法。

但是,如果你做這樣的事情,它肯定是可以實現的:

Public MustInherit Class MyParentClass
    Protected WithEvents MyButton As Button

    Protected MustOverride Sub MySub() Handles MyButton.Click
End Class

Public Class MyDerivedClass : Inherits MyParentClass : Implements IMyInterface
    Protected Overrides Sub MySub() Implements IMyInterface.MyMethod
        ' Do something here...
    End Sub
End Class

還要記住,事件處理程序方法通常具有獨特的簽名; 就像是:

Public Sub MySub(ByVal sender As System.Object, ByVal e As System.EventArgs)

這也是為什么事件處理程序方法能夠實現接口中定義的方法非常罕見的另一個原因。

暫無
暫無

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

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