我觉得自己像个傻瓜,但这里有:
public interface IHasErrorController{
ErrorController ErrorController { get; set; }
}
public class DSErrorController: ErrorController{yadi yadi ya}
public class DSWebsiteController : Controller, IHasErrorController{
public DSErrorController ErrorController { get; set; }
}
这给了我一个错误,说DSWebsiteController.ErrorController无法实现IHasErrorController,尽管DSErrorController是从ErrorController继承的。
此外,建议更好的命名,以便类型ErrorController和字段Errorcontroller看起来不一样(欢迎命名)。
答案 0 :(得分:5)
C#(目前)支持很少[共同]差异;因此,接口实现必须是完全匹配,包括返回类型。为了在类API上保留你的concreate类型,我会明确地实现接口 - 即添加:
ErrorController IHasErrorControlloer.ErrorController {
get {return this.ErrorController;}
set {this.ErrorController = (DSErrorController)value;}
}
或者,只需将属性类型更改为ErrorController
- 这可能(或可能不会)提供您需要的内容。
答案 1 :(得分:1)
这是真的;这是不允许的。 (正确的名称是“协变返回类型”)
请注意,DSWebsiteController.ErrorController可以物理返回DSErrorController对象;只是属性的返回值必须定义为ErrorController。