2009-03-30 10 views
3

私の友人は主にVB開発者であり、VBでのイベントをC#よりもコード化するのがどれほど簡単かと言われています。私の問題は、おそらくもっと簡単だが、複雑さが増す理由がなければ、おそらくC#で単純なものにしていただろう。 VB.Netのイベントではなく、C#イベントで行うことができる柔軟性や能力があれば教えてください。VBイベントではできないC#イベントで何かできることはありますか?

+0

あなたは宗教的な議論のようですね;)私はVB.NetとC#の間のいくつかの違いに遭遇しました。ほとんどのことを1つの方法で行うことができます。 –

+0

私はこれに慣れていない他の人からこれを聞いたことがあります。誰がこの噂を始めたのだろうか。 –

+0

私は_everything_とは​​言いませんが、確かにそのギャップはあなたが思うほど大きくはありません。 –

答えて

4

C#には匿名関数を使用してvoidを返すイベント(事実上すべてのイベント)を購読する機能しかありません。 VB.Net 9.0は値を返すラムダ式のみをサポートしています(これはVB 10.0で修正されています)。

VBイベント

  • Relaxed Delegatesのサポートに関して、C位に存在しない柔軟性のビットを有しています。これにより、VBはイベントタイプのパラメータのサブセットのみを必要とするイベントハンドラを使用することができます(ほとんど空のパラメータ関数で使用されます)
  • Handles句を使用すると、C# RaiseEventのキーワードはVB.Netでヌルイベントのチェック、問題は存在しないになり
  • ファイル.Designer.csて掘る
  • あなたの友人は、おそらくからの制御やイベントを選択することで、イベントハンドラを作成するために使用される
+0

戻り値の型のイベントを作成できないようです。私の投稿の助けをいただければ幸いです。http://stackoverflow.com/questions/2624886/vb-equivalent-of-c-event-creation – Steven

2

私はVBからC#のほうが好きですが、私はどちらもかなり流暢です。

私の頭の上には、VB.Netがどこにあるのかわかりやすい2つの場所があります。 1つは、イベントを呼び出す前にnullを確認する必要がないということです。

もう1つは、Handlesキーワードを追加したものです。イベントを処理し、それを1つのイベントに配線する完全な方法を宣言することができますこれはVBでの明確な利点です。なぜなら、そのキーワードがなくても、すべてのことを長い形式で行うことができるからです。これは単なる文法的な砂糖です。 。

構文の残りの部分はかなり洗浄である:?VBを使用すると、「+=」または「AddHandler」を好むん

+0

私はあなたが言及しているトレードオフは、あなたがイベント既にイベントハンドラが添付されています。 –

1

、あなたではなく、署名を意味することはできませんデリゲート型を宣言するよりも?私はそれは良いことですが、よく分からない

Public Event OnChange(ByVal Text As String) 

...

も ​​- ないRaiseEventハンドルヌル(非加入イベント)に自動的にいますか?もちろん、やりやすい。

+0

+1です。欠点は、コンパイラが毎回新しいデリゲート型を舞台裏で作ることです(私は信じています)。 – MarkJ

0

ソースコードページの上に2つのコンボボックスがあります。 C#の場合と同様に+ =ハンドラを手動でコーディングします。

0

C#では、仮想イベントを作成し、派生クラスでそれらをオーバーライドすることができます。 VB.NETにはこのようなことはありません。

関連する問題