c#中的类和对象

时间:2013-07-04 08:39:02

标签: c# class object

我有下一个情况

通用类:

public class A {
...
}

and two clases:

public class B: A {
...
}

public class C: A {
...
}

在代码的某些部分,我想做一些事情(先前已填充列表):

foreach (A item in list) {
   listB.add((B) item);
}

有可能吗?我只想将泛型listtems列表绑定到扩展泛型类的clases列表。

由于

2 个答案:

答案 0 :(得分:9)

您无法执行您要执行的操作,因为您无法将C类型的项目添加到B项目列表中

但是你可以

foreach(B item in list.OfType<B>())
       listB.add(item);

答案 1 :(得分:1)

这个解决方案要么是为B创建一个构造函数,它接受A的实例并从中构造B,或者类似于B上的静态方法,你可以提供A的实例,它将返回一个B的实例从A的实例构建。两者都不理想。

你不能做你正在尝试的事情的原因是因为B是A的子类。因此B将具有A的所有必需属性和方法,并且可以被视为它是A的实例。但是A没有B的所有必需属性和方法,因此它不能被视为类型B的对象。

然而,如其中一条评论中所述,如果您尝试将其作为类型B投射的项目实际上是B类,那么您的代码将起作用。