我们可以创建指向基础对象的派生类引用

时间:2017-02-07 12:06:15

标签: c#

我可以创建一个指向基础对象的派生类引用吗?

考虑以下示例。我正在尝试这个,但是会出错。

为什么不可能?

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
    }
}

这个问题有解决办法吗?

2 个答案:

答案 0 :(得分:2)

因为Circle不是Shape的基类。

哟可以这样做:

Shape shape = new Circle();

答案 1 :(得分:1)

以这种方式思考。
继承是一种“是一种”关系,例如 您可以说“圆圈形状”,“每个圆圈形状”
但是,你能说“形状圈”吗?好吧,一个形状可能是一个圆圈(直接我们遇到麻烦,答案不是明确的“是”)。
你能说“每个形状是一个圈子”吗?绝对没有,你做不到。正方形,三角形和矩形是所有形状,因此并非所有形状都是圆形。

在C#中,只有当“”语句有效时才能将一种类型转换为另一种类型(如果有疑问则应用“每x y”语句为了有效性。)

所以在C#中,定义class Circle: Shape是说Circle 形状,每个圆都是形状。