【发布时间】:2013-11-02 04:38:31
【问题描述】:
我知道超类可以存储子类的实例,
例如:
public class Subclass
{
private int color;
public Subclass()
{
color = "red";
}
}
Superclass v = new Subclass();
超类不知道子类中的方法、变量等, 但是投射它,让你可以访问这些。
它是如何工作的?
示例:
Vechicle v = new Car();
Car c = (Car) v;
Consoel.WriteLine(c.color);
Output:
red
【问题讨论】:
-
每个对象实例都有一个具体类型。其他所有内容都是应用于此类型的(兼容的)“视图”,
Car的演员表不会爆炸 - 它总是是一辆汽车!现在,由于 non-virtual 方法和 non-virtual 运算符,这些视图可能会造成一些破坏(阅读:多态性不按预期运行)......但是本身就是一个完整的讨论! -
@user2864740,您的术语对于 C# 程序员来说非常特殊。 (“view”?“explode”?)非虚方法和“非虚操作符”(!?)有什么关系?
-
@LaggKing,请仅发布您已编译的代码。 “子类 m”是严重非法的。
-
@KirkWoll 非虚拟方法根据“视图”(或“接收者”的 表达式 的类型(或根据调用成员(或点左侧的成员)))。我指出操作员是非虚拟的,因此遭受同样的命运。 “Explode”是口语化的,专门指 InvalidCastException(或非编译程序)。
标签: c# inheritance