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# 向上转换泛型类型到接口

我相信

你需要协方差才能正常工作。此功能仅在 C# 4.0 中可用。您需要做什么:

public interface IManageableEntryDao<out T> where T : IManageableEntry { }

请参阅泛型接口中的方差。 将接口更改为 IManageableEntryDao<out T>,它应该可以工作(除非接口以使其无效的方式使用它)。