【发布时间】:2014-10-01 00:40:49
【问题描述】:
考虑以下场景:
public abstract class ClassA
{
public void SomeMethod();
}
public class ClassB : ClassA
{
public void MethodForClassB()
{
}
}
public class ClassC : ClassA
{
public void MethodForClassC()
{
}
}
public static void Main(string[] args)
{
var classAList = new List<ClassA>();
classAList.Add(new ClassB());
classAList.Add(new ClassC());
}
现在如果我想这样做:
ClassB retrievedClass = List[0];
为了让我可以在 ClassA 的 sublass 上执行方法,编译器强制我向下转换为特定的 sublass 类型:
ClassB retrievedClass = (ClassB) List[0];
所以我的问题如下:
- 为什么框架不为我做隐式转换,因为类型是兼容的?
- 由于您需要强制转换为特定类型,因此此操作不是一种拆箱吗?
- 与来自 Object 的向下转换相比,向下转换的成本是多少?
- 是否有更好/更有效的方法来存储/访问共享相同超类的子类。
【问题讨论】: