我试图理解为什么下面的代码不编译。我得到的错误是:
'MyClass‘不实现接口成员'IFace.Deliver()’。'MyClass.Deliver()‘不能实现'IFace.Deliver()’,因为它没有匹配的返回类型'IDoSomething‘。
请注意,我不是要求某人重新定义编译器错误,只是告诉我与编译器相同的事情,或者说"...the编译器不支持它“,也不是问如何”修复“代码以使其编译(我可以通过取消注释示例中所示的方法来做到这一点)。
我试图理解代码不编译的基本原理。如果有人能指出C#规范中解决这个问题的位置,那就太好了。
按照我的想法,代码应该是有效的,因为:
诚然,#2是一个相当模糊的理由,我不想进入一个哲学的讨论。我真的在找一个技术上的原因,为什么它不起作用。
正如我所说的,我知道我需要做什么来“修复”它,但我真的想要理解为什么它不应该按编写的方式编译。
interface IFace {
IDoSomething Deliver();
}
interface IDoSomething {
}
class ThisOrThat : IDoSomething {
}
class MyClass : IFace {
public ThisOrThat Deliver() {
return new ThisOrThat();
}
// Uncomment the lines below to make it compile.
//IDoSomething IFace.Deliver() {
// return Deliver();
//}
}发布于 2013-08-03 02:56:22
问题是“MyClass”没有实现接口,因为返回类型‘type ()’与接口中的返回类型‘doesn()’不同。您可以说,由于多态性,它在技术上满足了接口的要求,但这并不意味着编译器必须支持该特性。
你想解决什么问题?为什么“MyClass”中的“传递”不能返回'IDoSomething‘的一个实例?或者像你上面做的那样使用超载。我不知道你为什么需要这个功能。我认为C#不支持这个特性,因为不需要它。
https://stackoverflow.com/questions/18028661
复制相似问题