我可以创建一个指向基础对象的派生类引用吗?
考虑以下示例。我正在尝试这个,但是会出错。
为什么不可能?
class Shape
{
public virtual void CalculateArea()
{
//Code
}
}
class Circle: Shape
{
public override void CalculateArea()
{
//Code
}
}
//Main method
class Main()
{
Public Static void Main()
{
Circle circle = new Shape(); // WHY THIS IS NOT POSSIBLE
}
}
这个问题有解决办法吗?
答案 0 :(得分:2)
因为Circle
不是Shape
的基类。
Shape shape = new Circle();
答案 1 :(得分:1)
以这种方式思考。
继承是一种“是一种”关系,例如
您可以说“圆圈是形状”,“每个圆圈是形状”
但是,你能说“形状是圈”吗?好吧,一个形状可能是一个圆圈(直接我们遇到麻烦,答案不是明确的“是”)。
你能说“每个形状是一个圈子”吗?绝对没有,你做不到。正方形,三角形和矩形是所有形状,因此并非所有形状都是圆形。
在C#中,只有当“是”语句有效时才能将一种类型转换为另一种类型(如果有疑问则应用“每x 是 y”语句为了有效性。)
所以在C#中,定义class Circle: Shape
是说Circle 是形状,每个圆都是形状。