2011-08-15 34 views
1

正在寫有事件和方法相同名字的類的方法,但視覺studion不會讓我使用相同的名稱爲事件類

事件

public event Close() 

方法

Public Sub Close() 

End Sub 

我怎麼能做到這一點,我不希望使用不同的名稱

感謝

+0

VB6執行此很多,採取例如Winsock控件,它有一個事件'close'和方法'Close'。我們爲什麼要限制? .net編譯器無法弄清楚這一點? – Smith

+2

vb6事件使用不同的接口,防止模糊。這不是.NET的工作方式。一個好的活動名稱將是關閉或關閉。 –

+0

感謝您的澄清 – Smith

回答

4

微軟框架設計指南指定沿着以下爲最佳實踐的東西線(這些都是從我們的內部文件,但前者提到的準則得出,而我會找到一個鏈接) :

  • 用動詞或動詞短語做名稱事件。
  • 不要給事件名稱的概念之前和之後,利用現在和過去時態 (動名詞)
    • 例如,之前被關閉的窗口將被稱爲>Closing和被提出了關閉事件在窗戶關閉後擡起的一個將被稱爲Closed
  • 請勿使用BeforeAfter前綴或後綴來指示事件前和事件後。
  • 是否使用EventHandler後綴命名事件處理程序(代表用作事件類型)。
  • 在事件處理程序簽名中,請使用名爲sendere的兩個參數。
    • 發件人參數應該是Object類型,並且e參數應該是EventArgs的一個實例或從其繼承。
  • 使用EventArgs後綴做名稱事件參數類。
  • 使用On命名事件處理程序方法。
    • 例如,處理事件的方法應該被命名爲OnClosing

更新:Relevant Microsoft Design Guidelines Link

1

AFAIK .NET編譯器不允許這種重載。 試試這個:

public event OnClose() 

Public Sub Close() 
    ' implementation goes here 
End Sub 
+0

雖然不是法律,但微軟反其道而行(請參閱我的回答)。 –

1

如果編譯器允許這樣做,那麼它可能會允許實例變量和委託具有相同的名稱。想象這(無意義)代碼:

Public Class Class1 
    Public XYZ As String 
    Public Event XYZ(ByVal X As XYZ) 
    Public Delegate Sub XYZ() 
    Public Sub XYZ() 
     RaiseEvent XYZ(AddressOf XYZ) 
    End Sub 
End Class 
相關問題