作为 OOP 的新手,我试图通过传递一个(需要的)子类参数来实现一个带有基本参数的接口(interface)方法。我有:
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);
}
}
错误是“ArchivedArticleDataAccess”没有实现接口(interface)成员“IArticleDataAccess.SaveArticle(NewsArticle)”,因为参数类型不一样。
我是犯了一个小错误还是错过了基本的 OOP 概念?我可以使用一种模式来做到这一点吗?类型转换还是泛型?或者这是 C# 的限制(不支持逆变参数)?
最佳答案
你不能在这里应用逆变,因为它会破坏契约。我可以通过接口(interface)将任何类型的 NewsArticle
发送到 SaveArticle 类,然后您的 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);
}
}
关于c# - 在C#中实现接口(interface)时如何传递子类参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1132403/