4 c# parameters interface class
作为OOP的新手,我试图通过传递(必需的)子类参数来实现具有基本参数的接口方法.我有:
public interface IArticleDataAccess { int SaveArticle(NewsArticle thisArticle); }
public AnalysisDataAccess : IArticleDataAccess {
public int SaveArticle(AnalysisArticle thisArticle) {
// Specific save code that needs properties of AnalysisArticle not found in NewsArticle.
}
public class AnalysisArticle : NewsArticle {
IArticleDataAccess dataAccess = new ArchivedArticleDataAccess();
int Save() {
return dataAccess.SaveArticle(this);
}
}
Run Code Online (Sandbox Code Playgroud)
错误是"ArchivedArticleDataAccess"没有实现接口成员'IArticleDataAccess.SaveArticle(NewsArticle)'",因为参数类型不一样.
我犯了一个小错误或错过了一个有趣的OOP概念吗?有没有我可以用来做这个的模式?铸造还是仿制药?或者这是C#的限制(没有逆变参数支持)?
你不能在这里申请逆转,因为它会破坏合同.我可以NewsArticle通过界面发送任何类型的SaveArticle类,然后你的barf AnalysisDataAccess...
你应该做的是使用泛型,如下所示:
public interface IArticleDataAccess<T> where T : NewsArticle
{
int SaveArticle(T thisArticle);
}
public AnalysisDataAccess : IArticleDataAccess<AnalysisArticle> {
public int SaveArticle(AnalysisArticle thisArticle) {
// Specific save code that needs properties of AnalysisArticle not found in NewsArticle.
}
public class AnalysisArticle : NewsArticle {
IArticleDataAccess<AnalysisArticle> dataAccess = new AnalysisArticleDataAccess();
int Save() {
return dataAccess.SaveArticle(this);
}
}
Run Code Online (Sandbox Code Playgroud)