请考虑以下代码:
var result = IDisposable.Dispose is object; //result equals false
令我感到惊讶的是(我的colleague实际上引起了我的注意)这段代码已被编译。
首先我的想法是IDisposable.Dispose
以某种方式转换为兼容的delegate
。但结果必须是true
,因为delegate
当然可以与object
分开。
查看规范我发现编译器对方法组进行了特殊处理(在 操作的上下文中):
如果E是方法组......结果为假。
纯粹出于好奇,为什么它在规范中?为什么编译器允许它?为什么不抛出编译时错误(比如匿名函数)?
更新: