举个简单的例子:
interface IVehicle {
}
class Car : IVehicle {
}
现在我应该能够做到以下几点:
IVehicle vehicle = new Car();
事实上,如果我像上面那样创建这些基类,我不会收到任何编译错误(并且代码会运行。)
但是在我的项目中,无论我在做什么基本上是这样的(据我所知),我都会收到以下错误:
Cannot implicitly convert type 'Namespace.Path.Car' to 'IVehicle'. An explicit conversion exists (are you missing a cast?)
有时(如在不同的代码位置,不是不同的编译)显式转换工作,有时它编译但创建运行时异常(无效转换)。为什么基本示例没有问题,而更详细的类(但仍然是直接实现接口的单个类)有所有这些问题?
在某些情况下,它实际上会出现这个编译时错误:
Cannot implicitly convert type 'Namespace.Path.IVehicle' to 'IVehicle'. An explicit conversion exists (are you missing a cast?)
我想我错过了这个隐式强制转换工作所需的一些重要条件,但我还没有发现什么区别导致简单示例工作和更详细的类如此奇怪地失败。我看到的唯一需要注意的是编译时错误只包括第一种类型的命名空间(如上面两个错误所示),但我不记得这是否正常。
为了消除任何环境原因,我只使用以下代码创建了一个测试用例:
ISimpleInterface simple = new SimpleImplementation();
IComplexInterface complex = new ComplexImplementation();
以上导致第二行出现编译时错误(表明它无法进行隐式转换)。