DOBON.NET DOBON.NETプログラミング掲示板過去ログ

イベントを定義することは出来ますか?

環境/言語:[C#1.1 VisualStudio 2003 UltraWinGrid]
分類:[.NET]

はじめまして、こんにちは。

イベントに関して質問があります。

DataグリッドにAとBという二行のRowが表示されています。

ここで

AというRowを選択して[転送]というボタンを押した時は、Hogeクラスのfooメソッドを呼び出し、BというRowを選択して[転送]というボタンを押した時は、Barクラスのfooメソッドを呼び出すという処理を行いたいと思っています。

#Hoge及びBarはIPiyoインタフェースを実装していて、IPiyoインタフェースで定義されているfooメソッドを実装しているとします。

この処理の実現方法として簡単に思いつくのは、

A及びBのそれぞれのRowのカラムにkeyを設定して、keyがAだったらHoge#fooメソッドを呼ぶ、keyがBだったらBar#fooメソッドを呼ぶというようにif文を書いてあげることなのですが、もうすこしスマートな実現方法はないでしょうか?

例えば

AのRowを選択して[転送]ボタンを押す --- (1)

BのRowを選択して[転送]ボタンを押す --- (2)

(1)及び(2)のようにイベントを定義して、

(1)又は(2)のイベントが起きたら、動的に相応なクラスのメソッドを呼び出してあげるなんてことは可能でしょうか?

この場合でしたら、(1)のイベントが起きたら、Hoge#fooを呼び出し、(2)のイベントが起きたら、Bar#fooを呼び出すなんてことが可能でしょうか?

御教授宜しくお願い致します。
> この場合でしたら、(1)のイベントが起きたら、Hoge#fooを呼び出し、(2)のイベントが起きたら、Bar#fooを呼び出すなんてことが可能でしょうか?

イベントを作れば出来ます。

ただイベントの際の処理をおこなうのは受け取り側であり、現状と何も変わりません。
つまり、Ifを書くのと同じことです。
受け取り側としては、(1)ではxxx、(2)ではyyyはIfを書くのと依存性のレベルで同じということ。

とにかく、何が何に依存するか、個々の役割は何かについて考えましょう。
fooインターフェースはそれでいいんじゃないのでしょうか。
そして実装オブジェクトを切り替える処理は絶対に必要なわけで、それをどうにかならないかと考えるのは無意味です。
#その手段だけの問題です。Ifを書くのか、その行のTagに実装オブジェクトを潜ませておくかなど。

イベントに関しては、イベントと受け取り側を切り離してイベントを実装するオブジェクトのことだけを考えます。
イベントを作るということは仕様を作るということになりますから
そのコントロールにそれが必要か、そういう目的のものかを検討してください。

DOBON.NET | プログラミング道 | プログラミング掲示板