C# 向上转换泛型类型到接口
本文关键字:接口 泛型类型 转换 | 更新日期: 2023-09-27 18:36:41
这与我最近发布的另一个主题类似,但也许这可能更简单、更清晰:
我想完成以下(或非常相似的事情)...
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>
,则得到一个空值。
我相信
你需要协方差才能正常工作。此功能仅在 C# 4.0 中可用。您需要做什么:
public interface IManageableEntryDao<out T> where T : IManageableEntry { }
请参阅泛型接口中的方差。 将接口更改为 IManageableEntryDao<out T>
,它应该可以工作(除非接口以使其无效的方式使用它)。