就是那个问题.我想要完成的是类似于以下Java代码:
class A { }
class B extends A { }
public class Tests {
public static void main(String [] args) {
ArrayList<? extends A> lists = new ArrayList<B>();
}
}
Run Code Online (Sandbox Code Playgroud)
(其中B extends AB继承自A)
有可能吗?
谢谢
不是.虽然C#4.0引入了接口的方差概念,但它并不是(也不可能)做你特别要求的.
在C#4.0中,您可以这样做:
IEnumerable<object> foo = new List<int>();
编辑:正如Marc所指出的,这不能用值类型和引用类型来完成.但是,由于我认为你的问题更多的是关于一个概括而A:B不是关于它的问题int:object,我认为这个问题具有重要意义.是准确的,不过,我的意思是,C#4.0将允许一些这样:
IEnumerable<object> foo = new List<string>();
Run Code Online (Sandbox Code Playgroud)
但你无法做你所描述的.也就是说,让我们考虑一下:
List<int> foo = new List<int>();
List<object> bar = foo;
bar.Add("baz");
Run Code Online (Sandbox Code Playgroud)
现在,当我们尝试访问时会发生什么foo[0]?您现在已经破坏了列表中的类型安全性.
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |