这与我最近发布的另一个主题类似,但也许这可能更简单,更清晰:
我想完成以下(或非常类似的事情)......
IManageableEntryDao<IManageableEntry> dao = new CompanyNameDao();
...包含以下课程:
public interface IManageableEntry {
string Name { get; set; }
}
public class CompanyName : IManageableEntry {
public string Name { get; set; }
}
public interface IManageableEntryDao<T> where T : IManageableEntry {
}
public class CompanyNameDao : IManageableEntryDao<CompanyName> {
}
如果我尝试进行演员as IManageableEntryDao<IManageableEntry>
,我会得到一个空。
答案 0 :(得分:4)
我相信你需要covariance来实现这个目标。此功能仅适用于C#4.0。你需要做什么:
public interface IManageableEntryDao<out T> where T : IManageableEntry { }
答案 1 :(得分:2)
见Variance in Generic Interfaces。将界面更改为IManageableEntryDao<out T>
并且它应该有效(除非界面以使其无效的方式使用它)。