C# 相当于 Java 的 在仿制药中
在 Java 中,我可以执行以下操作:(假设 Subclass
扩展 Base
):
ArrayList<? extends Base> aList = new ArrayList<Subclass>();
C# .NET 中的等效项是什么?没有<代码>?显然,extends 关键字是行不通的:
List<Base> aList = new List<Subclass>();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
实际上有一个等价的(某种程度上),即
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.查看
.Net 4.0
中引入的协方差
和逆变
。但它目前仅适用于接口
。例子:
Look into
Covariance
andContravariance
introduced with.Net 4.0
. But it only works withinterfaces
right now.Example:
如果您正在寻找两种类型的泛型,请看一下:
If you are looking for two type generics, Take a look at this:
没有完全等效项(因为类型系统的工作方式并不完全相同,包括类型擦除等),但您可以使用
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
andout
using covariance and contravariance.