我有一个简单的类结构
abstract class A {
List<A> containerList;
...
}
class B : A {....}
class C : A {....}
我确保 containerList
仅包含类 B
的元素或 C
(因为列表填充了这些子类并且 A
是抽象的)。
现在,我想以某种方式在 A
中拥有一个基本属性/方法它将自身转换为对象的真实类型,即 B
或 C
.有一个抽象方法就好了,但重要的是要得到一个 Collection<T>
的 B
或 C
对象,因为我有依赖于它的绑定(bind)。
最佳答案
Now, I'd like, somehow, to have a base property / method in A which would cast itself to whatever the real type of the object is, i.e. B or C.
我认为您正在混合使用转换 和转换。 Cast 是一种编译时构造,它仅确定在编译时如何绑定(bind)方法和属性。它不会更改基础对象。
没有必要进行转换,因为对象已经是B
或C
- 因为A
是抽象的,您不能拥有实际上 A
的对象。
因此,将基础集合作为 B
或 Cs
的集合返回的方法将只是:
public IEnumerable<B> GetBs()
{
return containerList.OfType<B>();
}
public IEnumerable<C> GetCs()
{
return containerList.OfType<C>();
}
如果您想要一种由调用者 确定类型的通用方法,您可以这样做:
public IEnumerable<T> GetTs<T>() where T:A
{
return containerList.OfType<T>();
}
关于c# - 继承对象的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37351832/