C# 相当于 Java 的 在仿制药中

发布于 2024-10-12 14:10:53 字数 312 浏览 4 评论 0 原文

在 Java 中,我可以执行以下操作:(假设 Subclass 扩展 Base):

ArrayList<? extends Base> aList = new ArrayList<Subclass>();

C# .NET 中的等效项是什么?没有<代码>?显然,extends 关键字是行不通的:

List<Base> aList = new List<Subclass>();

In Java, I can do the following: (assume Subclass extends Base):

ArrayList<? extends Base> aList = new ArrayList<Subclass>();

What is the equivalent in C# .NET? There is no ? extends keyword apparently and this does not work:

List<Base> aList = new List<Subclass>();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

如何视而不见 2024-10-19 14:10:53

实际上有一个等价的(某种程度上),即 where 关键字。我不知道它有多“接近”。我有一个函数需要做类似的事情。

我找到了 msdn 页面关于它。

我不知道您是否可以对变量进行内联操作,但对于类您可以这样做:
公共类 MyArray;其中 T: someBaseClass
或者对于一个函数
public T getArrayList(ArrayList arr) where T: someBaseClass

我没有在页面上看到它,但使用 where 关键字可能会一个变量。

Actually there is an Equivalent(sort of), the where keyword. I don't know how "close" it is. I had a function I needed to do something similar for.

I found an msdn page about it.

I don't know if you can do this inline for a variable, but for a class you can do:
public class MyArray<T> where T: someBaseClass
or for a function
public T getArrayList<T>(ArrayList<T> arr) where T: someBaseClass

I didn't see it on the page but using the where keyword it might be possible for a variable.

失与倦" 2024-10-19 14:10:53

查看 .Net 4.0 中引入的协方差逆变。但它目前仅适用于接口

例子:

IEnumerable<Base> list = new List<SubClass>();

Look into Covariance and Contravariance introduced with .Net 4.0. But it only works with interfaces right now.

Example:

IEnumerable<Base> list = new List<SubClass>();
晒暮凉 2024-10-19 14:10:53

如果您正在寻找两种类型的泛型,请看一下:

    void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;

If you are looking for two type generics, Take a look at this:

    void putAll<K1, V1>(Dictionary<K1,V1> map) where K1 : K where V1 : V;
饭团 2024-10-19 14:10:53

没有完全等效项(因为类型系统的工作方式并不完全相同,包括类型擦除等),但您可以使用 in 获得非常相似的功能并使用协变和逆变out

There is no exact equivalent (since the type system doesn't work in quite the same way, with type erasure and all), but you can get very similar functionality with in and out using covariance and contravariance.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文