我有两个类,如下所示,A类继承自B类.
public class A
{
public string Title { get; set; }
}
public class B: A
{
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个如下的函数,它接收A类的项目列表
public static void Get(List<A> values)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试将类B的项目列表传递到函数中时,如下所示
private function void Test()
{
var k = new List<B>();
Get(k);
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误消息
无法从'System.Collections.Generic.List <B>'转换为'System.Collections.Generic.List <A>'
如果这不起作用,因为B只是继承自A并且具有A具有的属性?
我已经花了好几个小时试图查看它,但没有弄清楚我做错了什么,请帮忙.
不,它不应该.它可能不安全:
class C : A {
}
public static void Get(List<A> values)
{
values.Add(new C());
}
Run Code Online (Sandbox Code Playgroud)
如果你要打电话Get跟new List<B>(),这将是不安全的,因为你会被插入的情况下C在List<B>.
然而,如果List<T>是一个"只读"接口,那将是安全的,在这种情况下,协方差就是你所寻求的,是安全的.您可以List<A>改为IEnumerable<A>相反,它会工作.
| 归档时间: |
|
| 查看次数: |
1087 次 |
| 最近记录: |