Легко! Так как здесь реализация GetHashCode
(сидя на базовом классе Delegate
):
public override int GetHashCode()
{
return base.GetType().GetHashCode();
}
(сидя на базовом классе MulticastDelegate
, который назовет выше ):
public sealed override int GetHashCode()
{
if (this.IsUnmanagedFunctionPtr())
{
return ValueType.GetHashCodeOfPtr(base._methodPtr);
}
object[] objArray = this._invocationList as object[];
if (objArray == null)
{
return base.GetHashCode();
}
int num = 0;
for (int i = 0; i < ((int) this._invocationCount); i++)
{
num = (num * 0x21) + objArray[i].GetHashCode();
}
return num;
}
Используя такие инструменты, как Reflector, мы можем увидеть код, и похоже, что реализация по умолчанию выглядит как странно , как мы видим выше.
Значение типа здесь будет Action
. Следовательно, приведенный выше результат правильный .
UPDATE