【问题标题】:How to use extends in generic for C#如何在 C# 的泛型中使用扩展
【发布时间】:2016-01-03 19:46:27
【问题描述】:

我是C# 的新手,如何在C# 中使用下面的泛型,我想要C# 中的Java 语句,

List<? extends MySuperClass> list= new ArrayList<MySubClass>();

Java 允许以上,我们可以在C# 中实现相同的功能吗?

【问题讨论】:

标签: java c#


【解决方案1】:

C# 没有通配符。所以简单的答案是否定的,没有直接的等价物。

但是,我认为用 Java 编写那行代码没有多大意义,因为您正在丢弃类型信息。你也可以写

List<MySubClass> list = new ArrayList<MySubClass>();

在 Java 中使用通配符的主要原因是让方法参数尽可能通用,如下所示:

static void foo(List<? extends MySuperClass> list)

你可以像这样用 C# 做到这一点:

static void foo<T>(IList<T> list) where T : MySuperClass 

【讨论】:

  • 我怎样才能将它与下面的变量一起使用public AbstractIBaseBo&lt;? extends AbstractDomain&gt; abstractIBaseBo =null;
  • @AnchitPancholi 我觉得这个设计很奇怪。你应该避免声明这样的字段。
  • @AnchitPancholi 我不认为你可以。我可能错了,因为我对 C# 不像对 Java 那样熟悉。我想你可以有一个AbstractIBaseBo&lt;AbstractDomain&gt;。我还认为您可以在具有类型参数T 其中T : AbstractDomain 的泛型类中拥有AbstractIBaseBo&lt;T&gt; 类型的字段。
  • 我会尝试找出其他可能的解决方案,否则我很可能需要更改我的设计。
猜你喜欢
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多