假设有以下情况:
class ClassParent { }
interface IClassProvider { ClassParent Get(); }
为什么这个IClassProvider实现是非法的:
class ClassChild : ClassParent, IClassProvider
{
ClassChild Get() { return this; }
}
它还不能用于继承属性和实现基类而不是接口的情况,就像示例中一样。
ClassChild 是 ClassParent。为什么它不能编译?编译器显然知道类的编译时类型,因此以下内容有效:
void DoSomething(object o) { ... };
void DoSomething(ConcreteClass c) { ... };
DoSomething(new ConcreteClass()); //Calls the second overload of the method because of static type resolving
在分层场景下,这迫使我拥有大量的代理方法,在底层情况清晰的情况下,我的代码变得杂乱无章。坦白地说,如果支持这一点,我想不出任何问题或歧义。对于像第二个示例中的重载那样的编译时(静态)解析,我会感到高兴。
编辑:我知道编译器期望以下内容:
class ClassChild : ClassParent, IClassProvider
{
ClassParent Get() { return this; }
}
我知道这会起作用,但我想要一个解释为什么它不被支持或在某种情况下会引起问题或模糊不清,这比重载更糟。而重载是被支持的。
编辑2: 这似乎又是一个旧问题的副本,MS本人在这个SO问题中回答了这个问题。我将@Euphoric的帖子标记为答案,因为他提供了一个功能名称,有助于找到“解决方案”。