質問

C# では、これら 2 行のコードに違いがある場合、どのような違いがありますか?

tmrMain.Elapsed += new ElapsedEventHandler(tmrMain_Tick);

そして

tmrMain.Elapsed += tmrMain_Tick;

どちらもまったく同じように動作するように見えます。C# では、後者を入力したときに、前者を意味するとみなしているだけでしょうか?

役に立ちましたか?

解決

これは私がしました

static void Hook1()
{
    someEvent += new EventHandler( Program_someEvent );
}

static void Hook2()
{
    someEvent += Program_someEvent;
}

次に、コードに対して ildasm を実行しました。
生成された MSIL はまったく同じでした。

あなたの質問に答えると、はい、それらは同じものです。
コンパイラは、あなたが望んでいることを推測しているだけです someEvent += new EventHandler( Program_someEvent );
-- 新しいものを作成しているのがわかります。 EventHandler どちらの場合も MSIL のオブジェクト

他のヒント

以前 (.NET 1.x の時代)、それを行う唯一の方法は長い形式でした。どちらの場合も、Program_someEvent メソッドを指すようにデリゲートを新しく作成します。

違いはないと思います。確かに、resharper は、最初の行に冗長なコードがあると言っています。

少し話が逸れました:

デリゲートをインスタンス化できます (new EventHandler(MethodName)) そして (適切な場合) そのインスタンスを再利用します。

そうではありませんでした new XYZEventHandler C#2003 までは必須でしたが、C#2005 では冗長コードを省略できましたか?

実際に判断する 1 つの方法は、コードに対して生成された MSIL を確認することだと思います。良好な酸テストになる傾向があります。

それが何らかの形で GC を混乱させるのではないかという奇妙な懸念があります。この方法で行う必要がない場合に、新しいデリゲート型を宣言するためのオーバーヘッドがすべて発生するのは奇妙に思えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top