やりますよ。ええ、やっちゃいます。
ModelとViewの分離のためにModelからViewにイベント飛ばすわけです。
Model側に用意したeventに View側のdelegateをアタッチするのね。
ModelとViewのライフタイムが一致してれば問題ないんだけど、
たとえばViewがダイアログだったりするとModelより先にViewが
お亡くなりになります。
このとき、Viewがこの世を去るにあたってdelegateをちゃんと
デタッチしておかないと、ModelがViewを掴んだままになるます。
ダイアログは消えてるのにイベントに反応しちゃうです。
声はすれども姿は見えず、ほんにおまえは屁のような。と。
デタッチせずにお構いなしにこの世を去らせたく、
弱参照をアタッチできんもんかとこねくりまわしてました。
それが車輪の再発明。WeakEventManagerゆーもんがあったです。
おかげさまでそれまでの丸一日をふっ飛ばしてくれやがりました。
まぁ無理もない話で、そもそもWeakEventManagerてぇ代物は
WPF絡みのものだったもんだから、僕が釣り糸垂れてた川には
棲んでなかったのよねー orz
車輪の再発明はがっかりさんしょんぼりさんではありますが、
芸の肥しになんだから善しとしましょう。
そんなこんなで WeakEventManager を使って Windows.Forms で
こさえたViewを弱参照させるココロミちうなう。
<そこで質問>
System.Type hoge があり、このhogeが示すクラスが
Foo あるいは Foo の派生であるかを調べにゃならんのです。
If hoge.Equals(GetType(Foo)) Then
だと Foo であるか否かはわかるけど、Foo の派生かはわかんない。
If hoge.IsSubclassOf(GetType(Foo)) Then
だと Foo の派生であるかはわかるけど、Foo であるかはわかんない。
If hoge.Equals(GetType(Foo)) OrElse hoge.IsSubclassOf(GetType(Foo)) Then
すりゃいいんだけどかったるいので、
これをイッパツで判断できんもんでしょか。
</そこで質問>