2017-04-17 6 views
0

私はVb.netでイベントを行ってきましたが、実際には素晴らしい機能であることがわかりました。しかし、それらを効果的に使用する方法についてはまだ混乱していました。サブ関数とイベントの違いは何ですか?

実際の疑問は、関数とサブがイベントの代替として有効であることです。私がイベントで行うことは何でも、私は関数とメソッドを使ってそれを行うことができます。 Raiseventがあるところでは、私はそれを関数またはprocesureに置き換えることができます。それでは、イベントの本当のメリットは何ですか?その場合、私は関数やプロシージャの代わりにそれらを使用できますか?

+2

イベントはオブジェクトを切り離すために使用されます。イベントを処理する場合、そのイベントを保持しているオブジェクトは、*誰がイベントに登録しているのか分かりません。イベントが発生したときに呼び出すメソッドへのポインタを取得します。これにより、異なるオブジェクトが、他のオブジェクトの実装の詳細を知らずに互いに通信することが可能になる。唯一知られているのは、パブリックインターフェイスです(この場合はイベントとイベントハンドラ)。 –

答えて

1

例を理解しているかどうかを見てみましょう。 Buttonコントロールがあります。それは多くのイベントを定義します(Click,MouseDown,Keypress ...)。 Formにボタンを入れたら、あなたが管理したいイベントは何ですか?。フォーム上では、ボタンをクリックしたときや何もしないときに何かをすることができます。

これが通常の方法で行われた場合を想像してください。その場合、ボタンにはボタンがあるフォームへの参照があり、フォームにはClickメソッドが必要です。それはそれを使用しているかどうかです。

イベント駆動型プログラミングでは、クラス内で何かが発生したときに通知するイベントを定義するのが非常に簡単になり、イベントが関連するかどうかを決定するインスタンスを作成するクラスです。

0

説明をいただきましてありがとうございます。私が逃したポイントは、同じクラスのでイベントが発生しますが、の異なるクラスで実行されます。

私は、クラスを定義するときにRaiseEventをどこかに認識させることができますが、イベントを別のクラスのサブと関連付けることができます。 AllWallet

If Dollars > 5 Then 
     RaiseEvent Above5() 
    End If 

と呼ばれる、そのような別のクラスで:

ので、そのようなクラスと呼ばれる財布に私のような文を置くことができます

Dim WithEvents myWallet as new Wallet 
Sub myWallet_Above5() Handles myWallet.Above5 
    MsgBox("Dollars are more than 5") 
End Sub 

をそれ以外の場合は、イベントがで焼成されている場合、私が意味しますそれらが定義されている同じクラスであれば、サブと関数はイベントを代用することができます。

ありがとうございました

+0

クラスはそれ自身のイベントを処理するべきではありません。イベントは通常、クラス外の何かがあなたの例のように起こったことを通知するためのものです。要点は、クラスがイベントを発生させたときに、イベントの加入者が何をするのか、それを気にするべきかを知らないということです。 –

関連する問題