【问题标题】:C# upcast generic type to interfaceC#向上转换泛型类型到接口
【发布时间】:2012-06-08 22:50:17
【问题描述】:

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

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

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&lt;IManageableEntry&gt;,我会得到一个空值。

【问题讨论】:

  • 所以这在 C# 3.5 中不可行?
  • 很遗憾,没有。至少,不是直接的。您必须找到解决方法,例如使CompanyNameDao 继承自IManageableEntryDao&lt;IManageableEntry&gt;;这是你的电话。
  • 对,这不太优雅,因为 CompanyNameDao 返回的是 IManageableEntry 对象而不是 CompanyName 对象。

标签: c# generics interface polymorphism


【解决方案1】:

我相信您需要covariance 才能使其正常工作。此功能仅在 C# 4.0 中可用。你需要做什么:

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

【讨论】:

    【解决方案2】:

    Variance in Generic Interfaces。将接口更改为IManageableEntryDao&lt;out T&gt;,它应该可以工作(除非接口以使其无效的方式使用它)。

    【讨论】:

      猜你喜欢
      • 2013-03-27
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2011-01-07
      • 2016-10-20
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      相关资源
      最近更新 更多