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 はまったく同じでした。
あなたの質問に答えるために、はい、それらは同じものです。
コンパイラは、必要なことを推測しているだけです。MSIL の両方のケースで、新しいオブジェクトをsomeEvent += new EventHandler( Program_someEvent );
作成していることがわかります。EventHandler
以前は (.NET 1.x 日)、長い形式が唯一の方法でした。どちらの場合も、Program_someEvent メソッドを指すようにデリゲートを作成しています。
違いはないと思います。確かに resharper は、最初の行に冗長なコードがあると言います。
少しオフトピック :
デリゲート(new EventHandler(MethodName))
をインスタンス化し、(適切な場合) そのインスタンスを再利用できます。
new XYZEventHandler
C#2003 までは require だったのに、C#2005 では冗長なコードを省略できたのですか?
本当にわかる1つの方法は、コード用に作成されたMSILを見ることだと思います..良い酸テストになる傾向があります..
どういうわけかGCを台無しにするかもしれないという面白い懸念があります..新しいデリゲート型を宣言する必要がない場合、この方法で宣言するすべてのオーバーヘッドがあるのは奇妙に思えますね。