をにキャストしようとしWaitCallBack
ていますAction<object>
私はこれをやっています:
WaitCallBack w1 = Foo;
Action<object> a1 = new Action<object>(w1);
Action<object> a2 = Foo;
ただし、 と を比較しようとするa1
とa2
、 が返されfalse
ます。
平等が真になるように、デリゲートをキャストする場所はありますか?
ありがとう。
代表者はメソッド+ターゲットで比較します。問題は、さまざまなものを比較していることです。
この行をコンパイラーが認識するものに拡張すると、おそらくより明確になります。
Action<object> a1 = new Action<object>(w1);
実際には:
Action<object> a1 = new Action<object>(w1.Invoke);
Invoke
(デリゲートに対する暗黙の操作を使用)
w1
ターゲットがであり、メソッドがであることがわかりますInvoke
。これを確認できます:
Console.WriteLine(a1.Method.Name); // Invoke
Console.WriteLine(ReferenceEquals(a1.Target, w1)); // true
他と比較してください:
Action<object> a2 = Foo;
ここで、ターゲットはnull
(静的な場合)またはthis
(非静的な場合)のいずれかであり、メソッドはFoo
です。デリゲートは同じではありません。報告するのは正しいですfalse
。
この連鎖操作は手動で確認できますが、特にすべての組み合わせ/深さを考慮する必要がある場合は、少し面倒です。しかし、些細な例:
Delegate del = a1.Target as Delegate;
if(del != null)
{
if(del.Method == a2.Method && del.Target == a2.Target)
{
Console.WriteLine("pass");
}
}