如何在 C# 的泛型中使用扩展
Posted
技术标签:
【中文标题】如何在 C# 的泛型中使用扩展【英文标题】:How to use extends in generic for C# 【发布时间】:2016-01-03 19:46:27 【问题描述】:我是C#
的新手,如何在C# 中使用下面的泛型,我想要C#
中的Java
语句,
List<? extends MySuperClass> list= new ArrayList<MySubClass>();
Java
允许以上,我们可以在C#
中实现相同的功能吗?
【问题讨论】:
在 C# 中称为泛型约束。 相关:***.com/q/32664/1065197***.com/q/588643/1065197 这不是在 Java 中使用泛型的好例子。 【参考方案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<? extends AbstractDomain> abstractIBaseBo =null;
@AnchitPancholi 我觉得这个设计很奇怪。你应该避免声明这样的字段。
@AnchitPancholi 我不认为你可以。我可能错了,因为我对 C# 不像对 Java 那样熟悉。我想你可以有一个AbstractIBaseBo<AbstractDomain>
。我还认为您可以在具有类型参数T
其中T : AbstractDomain
的泛型类中拥有AbstractIBaseBo<T>
类型的字段。
我会尝试找出其他可能的解决方案,否则我很可能需要更改我的设计。以上是关于如何在 C# 的泛型中使用扩展的主要内容,如果未能解决你的问题,请参考以下文章