C#upcast泛型类型到接口

时间:2012-06-08 22:50:17

标签: 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>,我会得到一个空。

2 个答案:

答案 0 :(得分:4)

我相信你需要covariance来实现这个目标。此功能仅适用于C#4.0。你需要做什么:

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

答案 1 :(得分:2)

Variance in Generic Interfaces。将界面更改为IManageableEntryDao<out T>并且它应该有效(除非界面以使其无效的方式使用它)。