<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C#</title><link>http://blogs.wankuma.com/kzt/category/2043.aspx</link><description>C#に関するエントリ</description><managingEditor>kazuto</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>kazuto</dc:creator><title>[VB][C#] イベントアクセサ</title><link>http://blogs.wankuma.com/kzt/archive/2009/03/25/170208.aspx</link><pubDate>Wed, 25 Mar 2009 20:23:00 GMT</pubDate><guid>http://blogs.wankuma.com/kzt/archive/2009/03/25/170208.aspx</guid><wfw:comment>http://blogs.wankuma.com/kzt/comments/170208.aspx</wfw:comment><comments>http://blogs.wankuma.com/kzt/archive/2009/03/25/170208.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/kzt/comments/commentRss/170208.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/kzt/services/trackbacks/170208.aspx</trackback:ping><description>イベントにはイベントアクセサと言うものがありますが、VBでのイベントアクセサに少し違和感。&lt;br&gt;
発端はVBでのイベントアクセサに指定するデリゲートは「戻り値の型を持つ事が出来ない」事からです。&lt;br&gt;
&lt;br&gt;
VBではコードによるイベントのアタッチは下記の方法が一般的には使用されているように見えます。&lt;br&gt;
(あくまでも自分の経験上です）&lt;br&gt;
&lt;br&gt;
&lt;div class="code"&gt;
&lt;div style="font-family: メイリオ; font-size: 8pt; color: black; background: white;"&gt;
&lt;span style="color: blue;"&gt;AddHandler&lt;/span&gt; Button1.Click, &lt;span style="color: blue;"&gt;AddressOf&lt;/span&gt; Button1_Click
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
C#でのアタッチ方法はこのようにします。&lt;br&gt;
&lt;br&gt;
&lt;div class="code"&gt;
&lt;div style="font-family: メイリオ; font-size: 8pt; color: black; background: white;"&gt;
Button1.Click += Button1_Click;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
この二つを比較すると、自分は断然C#の方が「&lt;span style="color: lightblue; font-size: 12pt;"&gt;&lt;b&gt;ButtonのClickイベントにイベントハンドラを&lt;span style="color: yellow; font-size: 15pt;"&gt;登録して！&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;」のように感じます。&lt;br&gt;
VBでのイベントアタッチは「&lt;span style="color: lightblue; font-size: 12pt;"&gt;&lt;b&gt;ButtonがClickされたら、イベントハンドラを&lt;span style="color: yellow; font-size: 15pt;"&gt;呼んでね♪&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;」って感じます。&lt;br&gt;
&lt;br&gt;
どちらも角度を変えた言い方であってどちらも正解だと思うのですが、VBではキーワードを使用した定義が多い為か、「呼んでね♪」って印象が植えつく理由の一つとして「キーワードが多い」事かな？って感じてます。&lt;br&gt;
イベントアクセサの実装をスタートとして、VBで実現不可の実装を「目的のみ達成するアプローチ」を試しにやってみます。&lt;br&gt;
&lt;br&gt;
- VB -&lt;br&gt;
&lt;div class="code"&gt;
&lt;div style="font-family: メイリオ; font-size: 8pt; color: black; background: white;"&gt;
&lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt; Sample
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; funcList &lt;span style="color: blue;"&gt;As&lt;/span&gt; Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;) = &lt;span style="color: blue;"&gt;Function&lt;/span&gt;() &lt;span style="color: blue;"&gt;False&lt;/span&gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Custom&lt;/span&gt; &lt;span style="color: blue;"&gt;Event&lt;/span&gt; Func &lt;span style="color: blue;"&gt;As&lt;/span&gt; Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;)
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;AddHandler&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; value &lt;span style="color: blue;"&gt;As&lt;/span&gt; Action(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;String&lt;/span&gt;))
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; funcList = &lt;span style="color: blue;"&gt;DirectCast&lt;/span&gt;([Delegate].Combine(funcList, value), Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;))
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;AddHandler&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;RemoveHandler&lt;/span&gt;(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; value &lt;span style="color: blue;"&gt;As&lt;/span&gt; Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;))
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; funcList = &lt;span style="color: blue;"&gt;DirectCast&lt;/span&gt;([Delegate].Remove(funcList, value), Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;))
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;RemoveHandler&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;RaiseEvent&lt;/span&gt;()
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OnFunc()
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;RaiseEvent&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Event&lt;/span&gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Protected&lt;/span&gt; &lt;span style="color: blue;"&gt;Overridable&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; OnFunc()
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;For&lt;/span&gt; &lt;span style="color: blue;"&gt;Each&lt;/span&gt; func &lt;span style="color: blue;"&gt;As&lt;/span&gt; Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;) &lt;span style="color: blue;"&gt;In&lt;/span&gt; funcList.GetInvocationList()
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; func &lt;span style="color: blue;"&gt;IsNot&lt;/span&gt; &lt;span style="color: blue;"&gt;Nothing&lt;/span&gt; &lt;span style="color: blue;"&gt;Then&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; result &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt; = func()
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Next&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;br&gt;&lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
- C# -&lt;br&gt;
&lt;div class="code"&gt;
&lt;div style="font-family: メイリオ; font-size: 8pt; color: black; background: white;"&gt;
&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Sample&lt;/span&gt;
&lt;br&gt;{
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;gt; funcList = () =&amp;gt; &lt;span style="color: blue;"&gt;false&lt;/span&gt;;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;event&lt;/span&gt; &lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;gt; Func
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;add&lt;/span&gt; { funcList += &lt;span style="color: blue;"&gt;value&lt;/span&gt;; }
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;remove&lt;/span&gt; { funcList -= &lt;span style="color: blue;"&gt;value&lt;/span&gt;; }
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;virtual&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; OnFunc()
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #2b91af;"&gt;Func&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;gt; func &lt;span style="color: blue;"&gt;in&lt;/span&gt; funcList.GetInvocationList())
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (func != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;bool&lt;/span&gt; result = func();
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;br&gt;}
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
上記実装ではVBではコンパイルエラーになります。これはVBでのイベントアクセサでは「&lt;b&gt;イベントに戻り値の型があるデリゲートは指定出来ない&lt;/b&gt;」という仕様があるためです。&lt;br&gt;
なのでこの問題を回避する為に、イベントアクセサを使用せずイベントアクセサメソッドを実装して回避します。&lt;br&gt;
&lt;br&gt;
&lt;div class="code"&gt;
&lt;div style="font-family: メイリオ; font-size: 8pt; color: black; background: white;"&gt;
&lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt; Sample
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Private&lt;/span&gt; funcList &lt;span style="color: blue;"&gt;As&lt;/span&gt; Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;) = &lt;span style="color: blue;"&gt;Function&lt;/span&gt;() &lt;span style="color: blue;"&gt;False&lt;/span&gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; AddFunc(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; value &lt;span style="color: blue;"&gt;As&lt;/span&gt; Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;))
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; funcList = &lt;span style="color: blue;"&gt;DirectCast&lt;/span&gt;([Delegate].Combine(funcList, value), Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;))
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Public&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; RemoveFunc(&lt;span style="color: blue;"&gt;ByVal&lt;/span&gt; value &lt;span style="color: blue;"&gt;As&lt;/span&gt; Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;))
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; funcList = &lt;span style="color: blue;"&gt;DirectCast&lt;/span&gt;([Delegate].Remove(funcList, value), Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;))
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;br&gt;&amp;nbsp;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Protected&lt;/span&gt; &lt;span style="color: blue;"&gt;Overridable&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt; OnFunc()
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;For&lt;/span&gt; &lt;span style="color: blue;"&gt;Each&lt;/span&gt; func &lt;span style="color: blue;"&gt;As&lt;/span&gt; Func(&lt;span style="color: blue;"&gt;Of&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt;) &lt;span style="color: blue;"&gt;In&lt;/span&gt; funcList.GetInvocationList()
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;If&lt;/span&gt; func &lt;span style="color: blue;"&gt;IsNot&lt;/span&gt; &lt;span style="color: blue;"&gt;Nothing&lt;/span&gt; &lt;span style="color: blue;"&gt;Then&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Dim&lt;/span&gt; result &lt;span style="color: blue;"&gt;As&lt;/span&gt; &lt;span style="color: blue;"&gt;Boolean&lt;/span&gt; = func()
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;If&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;Next&lt;/span&gt;
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Sub&lt;/span&gt;
&lt;br&gt;&lt;span style="color: blue;"&gt;End&lt;/span&gt; &lt;span style="color: blue;"&gt;Class&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
もうこの時点で「Eventキーワード」を捨てる事になり、そのクラスを使用する側への提供アプローチを変える必要があります。&lt;br&gt;
また外部よりイベントを発行を行わせない為にも、「funcList」変数は外部に公開出来ません。&lt;br&gt;
イベントとして外部からはもう見えないので、イベントアクセサメソッドのみしか残らないので、使用する側からしたら「&lt;span style="color: lightblue; font-size: 12pt;"&gt;&lt;b&gt;なんでAddFuncやRemoveFuncが必要なのよ！！！！&lt;/b&gt;&lt;/span&gt;」と言われちゃいます。&lt;br&gt;
&lt;br&gt;
「&lt;span style="font-size: 8pt;"&gt;いやいや・・・。イベントとして実装出来ないから、イベントハンドラをデリゲートリストに登録して頂きたく思っているのですが・・・&lt;/span&gt;」って言ってる間に&lt;br&gt;
「&lt;span style="color: yellow; font-size: 18pt;"&gt;&lt;b&gt;イベントハンドラは登録するんじゃなく呼んでもらうんだよっっっ！！！！&lt;/b&gt;&lt;/span&gt;」&lt;br&gt;
&lt;br&gt;
こんな展開になります。&lt;br&gt;
VBでは「RaiseEventキーワード」があるので通常イベント発行はデリゲートを直接呼ぶ事はないですが、C#のようにデリゲートを呼んでイベント発行を行う事も出来るわけで・・。&lt;br&gt;
&lt;br&gt;
まず、戻り値のあるイベント実装ってVBでは見た事ない（出来ない）ので、こんな実装アプローチはしないと思いますが、以前MSDNマガジン2008年9月号で掲載されている&lt;a href="http://msdn.microsoft.com/ja-jp/magazine/cc785480.aspx" target="_blank"&gt;WPF におけるルーティング イベントとルーティング コマンドについて&lt;/a&gt;内のカスタムコマンドのサンプル実装をVBに落として試していた時に違和感を感じる事になったのがきっかけです。&lt;br&gt;
そもそも言語が違うしこのような物はいっぱいあるんだと思いますが、VB側目線（自分はほぼVB開発が主なので）で見た場合「キーワードを使用して植えついてしまう印象と、目的は達成出来てもキーワードを捨てる事によるギャップ」が凄く感じる件でした。&lt;br&gt;
&lt;br&gt;
結論は「きちんと学習しましょう」になるんだと思いますが、ちょっとした言語の違いを感じる事だったので (^^;&lt;br&gt;
このような言語の違いって見つけて調べるのって何気に楽しいですね。&lt;br&gt;
&lt;br&gt;
ってかC#の開発をやりたいな・・・。&lt;br&gt;
&lt;br&gt;&lt;img src ="http://blogs.wankuma.com/kzt/aggbug/170208.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>