接口不接受继承成员(OO问题)

Bor*_*ens 2 c# oop

我觉得自己像个傻瓜,但是这里有:

public interface IHasErrorController{
  ErrorController ErrorController { get; set; }
}

public class DSErrorController: ErrorController{yadi yadi ya}

public class DSWebsiteController : Controller, IHasErrorController{
    public DSErrorController ErrorController { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误,说DSWebsiteController.ErrorController无法实现IHasErrorController,尽管DSErrorController是从ErrorController继承的.

此外,欢迎使用建议更好的命名,以便类型ErrorController和字段Errorcontroller看起来不一样(命名很难).

Mar*_*ell 5

C#(目前)对[co | contra]方差支持很少; 因此,接口实现必须完全匹配,包括返回类型.为了在类API上保持你的concreate类型,我会明确地实现接口 - 即添加:

ErrorController IHasErrorControlloer.ErrorController {
  get {return this.ErrorController;}
  set {this.ErrorController = (DSErrorController)value;}
}
Run Code Online (Sandbox Code Playgroud)

或者,只需将属性的类型更改为ErrorController- 这可能(或可能不)给出您需要的内容.