C# 将泛型类型向上转型为接口(interface)

标签 c# generics interface polymorphism

这与我最近发布的另一个主题类似,但也许这可能更简单、更清晰:

我想完成以下任务(或非常类似的事情)...

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> ,我得到一个空值。

最佳答案

我相信你需要covariance为了这个工作。此功能仅在 C# 4.0 中可用。您需要做什么:

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

关于C# 将泛型类型向上转型为接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10956891/

相关文章:

c# - 从进程内存中读取 int

c# - 由于类型不匹配,无法完成日期时间转换

c++ - 为什么 Boost Graph Library 的 `source()` 是一个全局函数?

c#泛型接口(interface)解决方案

java - 有效的Java第19条-仅使用接口(interface)来定义类型

c# - 您是否为域模型中的每个公共(public)类都定义了一个接口(interface)?优点和缺点?

javascript - 如何在另一个razor页面中访问一个razor页面的JS变量?

c# - 如何在ASP.NET Core Razor Pages项目中启用外部身份验证?

c# - 使用 LINQ 按子类的属性对父类列表进行排序

linux - linux 将在 eth0 和 eth0.1 之间使用哪个接口(interface)?