好吧,我对抽象关系“IS-A”和接口“HAS-A”功能有一个疑问。
例如,我有以下课程:
public interface IReport
{
int code { get; set; }
String description { get; set; }
void SetReport(String description, int code);
void DeleteReport();
}
public abstract class BugReport : IReport
{
public int? code { get; set; }
public String description { get; set; }
public void IReport.SetReport(String description, int code)
{
this.description = description;
this.code = code;
}
public void IReport.DeleteReport()
{
this.description = "";
this.code = null;
}
}
我知道我的 BugReport 类将始终具有相同的实现,但如有必要,我可以在子类上扩展它。如果例如在此类上使用此标准,则此标准将匹配抽象类“用法”但不匹配“IS-A”关系:
public abstract Parser : BugReport
{
}
我的解析器是错误报告吗?显然不是,但这似乎是最合乎逻辑的选择,如果我将我的 BugReport 作为一个接口,我将不得不在我继承的所有类中实现该功能。那么我做错了什么,我应该继续使用独立于 IS-A 关系不匹配的抽象还是应该切换到接口?