C#无法访问类的基本属性(仅继承)

Ton*_*pia 6 c# oop inheritance properties visual-studio-2012

这是我的代码(应该很容易理解我想要实现的目标):

public class Order
{
    private Drink drink;
    public Drink Drink {get { return drink; } set { drink = value; }}
}

public class Drink
{
    enum colour 
    {
        Red, Transparent
    };
}

public class cocktail : Drink
{
    private int alcoholContent;
    public int AlcoholContent  { get { return alcoholContent; } set { alcoholContent = value; } }
}
Run Code Online (Sandbox Code Playgroud)

然后我试图访问属性,但他们不在那里:

Order order = new Order();
order.Drink = new cocktail();
order.Drink. <- no alcohol content?
Run Code Online (Sandbox Code Playgroud)

这是为什么?我以为我创造了一个鸡尾酒课,而不仅仅是一杯饮品?我究竟做错了什么?

谢谢!

Mar*_*zek 9

您不能AlcoholContent直接使用属性,因为您Coctail通过Drink引用使用实例.

Order order = new Order();
order.Drink = new cocktail();
//  order.Drink. <- no alcohol content?
((Coctail)order.Drink).AlcoholContent <- works just fine
Run Code Online (Sandbox Code Playgroud)

您必须使用显式(Coctail)强制转换才能使用特定于Coctail类的成员.

这是为什么?考虑一种情况,其中有另一个名为的类SoftDrink:

public class SoftDrink : Drink
{
}
Run Code Online (Sandbox Code Playgroud)

您仍然可以将SoftDrink实例分配给order.Drink:

Order order = new Order();
order.Drink = new SoftDrink();
//  order.Drink. <- no alcohol content? It's a SoftDring!!
Run Code Online (Sandbox Code Playgroud)

并且因为order.Drink属性可以处理每个 属性Drink,所以只能使用为Drink类指定的成员.即使实际上有一个更具体的类实例分配给该属性.