Подтвердить что ты не робот

Применение оператора "is" к группе методов: почему компилятор разрешает это?

Рассмотрим следующий код:

var result = IDisposable.Dispose is object; //result equals false

Для меня было неожиданностью (и моему коллеге, который действительно привлек мое внимание к этому), что этот код скомпилирован.

Сначала я подумал, что IDisposable.Dispose каким-то образом преобразуется в совместимый delegate. Но тогда результат должен быть true, так как delegate, разумеется, является сопоставимым с object.

Заглянув в спецификацию, я обнаружил, что группы методов имеют специальную обработку компилятором (в контексте операции):

Если E - группа методов... результат - false.

Чисто из любопытства, почему это в спецификации? Почему компилятор разрешает это? Почему бы не бросить ошибку времени компиляции (например, для анонимных функций)?

UPDATE:

  • Он скомпилирован для меня в VS2013 (12.0.21005.1) и .NET 4.5/4.5.1;
  • piojo сообщите нам, что этот код НЕ скомпилирован в Mono (я не могу проверить его сам);
  • Он не компилируется для leppie в VS2015 (4.5 или 3.5);
  • НЕ скомпилировано под VS2013/12.0.30501.00 обновление 2, цель .NET 4.5.2 (caramiriel);
4b9b3361