尝试使用可以为 XML 解析提供位置参考的 excpetion 类,发现了一个有趣的行为 - 当我尝试将 XmlReader 作为参数传递时,编译器无法在使用接口的重载和需要 System.Exception 的重载之间进行选择。
详情如下:
//exception overloads:
public FilterXmlParseException(string message, Exception innerException)
: base(message, innerException) { }
public FilterXmlParseException(string message, IXmlLineInfo lineInfo) {...}
//Usage:
XmlReader reader = ...
IXmlLineInfo lineinfo = (IXmlLineInfo)reader;
//fails
throw new FilterXmlParseException("<Filter> element expected", reader);
//ok
throw new FilterXmlParseException("<Filter> element expected", lineinfo);
它失败了,因为它无法选择正确的重载。但是为什么呢?我们看到 XmlReader 支持一个接口并且它不是从 System.Exception 继承的