2

这类似于我最近发布的另一个主题,但也许这可能更简单明了:

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

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> {
}

如果我尝试进行 cast as IManageableEntryDao<IManageableEntry>,我会得到一个空值。

4

2 回答 2

4

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

public interface IManageableEntryDao<out T> where T : IManageableEntry { }
于 2012-06-08T22:54:08.067 回答
2

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

于 2012-06-08T22:54:43.877 回答