2010-03-30 24 views
8

我是一名VB程序員,我的方式進入C#。我學會了如何在vb中創建和引發事件,並發現它在C#中沒有以相同的方式完成。有沒有人遇到過一篇文章,可以幫助我理解如何在C#中完成事件,並解釋爲什麼它在VB中不同。VB和C#中的事件有什麼區別?

謝謝

+0

這個問題解釋了VB.Net中的'handles'和C#事件語法之間的區別http://stackoverflow.com/questions/794332/migrating-handles-from-vb-net-to-c – MarkJ 2010-03-30 17:09:23

+0

感謝MarkJ真的很感謝你的幫助 – 2010-03-30 19:07:02

回答

0

的區別主要是語法。

請參閱this有關這些差異的便捷參考。

VB.NET中的事件處理程序是用附加到事件處理程序簽名的Handling關鍵字聲明的。在C#中,您需要使用註冊它+=

在VB.NET中,您使用RaiseEvent調用事件,在C#中直接調用委託。

+0

感謝您的幫助Oded – 2010-03-30 19:09:03

0

從閱讀:

http://msdn.microsoft.com/en-us/library/aa645739(VS.71).aspx

在C#中的事件是一類以 提供通知的 客戶端類時,一些有趣的事情發生了 爲對象的一種方式。熟悉用於事件的最多 是 圖形用戶界面;通常, 代表 中控件的類別 當用戶對控件執行某些操作時(例如,單擊 按鈕),接口的事件通知爲 。

但是,事件不需要僅用於圖形界面的 。事件 提供了一種通常有用的方式,用於對象發出狀態變化信號,該變化對於該對象的客戶端可能是有用的。事件是用於創建類 的重要的 構建塊,其可以在不同程序的大量 中重用。

請參閱其餘文章。

0

關於語法中一些關鍵差異的快速通用參考可以在here找到。搜索「事件」以查看該部分。

主要區別是,VB要求你使用一些關鍵字,而不是加法/減法要連接的事件,但給你一個處理關鍵字自動連接一個例行的事件。當傳遞委託時,您必須使用無意義的AddressOf關鍵字。 (對於編輯而言,很抱歉,但我認爲這個關鍵字比它節省了更多的困惑!)

+0

感謝您的評論Patrick – 2010-03-30 19:08:43

+0

@M沒問題。是的。 。 。值得讚賞嗎? :) – 2010-03-31 01:47:08

1

主要區別在於使用的語法。在下面,他們在CLR中使用完全相同的機制。

但是,VB。NET通過WithEventsHandles提供特殊的語法,讓你做:

Dim WithEvents button1 As Button 

Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyButton.Click 
    ' Handle button click 
End Sub 

C#不提供equivelent - 所有事件必須通過event +=明確訂閱,這更像是VB.NET的AddHandler聲明。

+0

感謝您的幫助裏德 – 2010-03-30 19:09:19

相關問題