这是我的代码(应该很容易理解我要实现的目标):
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; } }
}
然后我试图访问这些属性,但它们不在那里:
Order order = new Order();
order.Drink = new cocktail();
order.Drink. <- no alcohol content?
为什么?我以为我真的创造了一个鸡尾酒班,而不仅仅是一杯?
我做错什么了?
谢谢您!
最佳答案
您不能直接使用AlcoholContent
属性,因为您正在通过Coctail
引用使用Drink
实例。
Order order = new Order();
order.Drink = new cocktail();
// order.Drink. <- no alcohol content?
((Coctail)order.Drink).AlcoholContent <- works just fine
必须使用显式
(Coctail)
转换才能使用特定于Coctail
类的成员。为什么?考虑一种情况,其中有另一个名为
SoftDrink
的类:public class SoftDrink : Drink
{
}
您仍然可以将
SoftDrink
实例分配给order.Drink
:Order order = new Order();
order.Drink = new SoftDrink();
// order.Drink. <- no alcohol content? It's a SoftDring!!
而且由于
order.Drink
属性可以处理每个Drink
,因此只能使用为Drink
类指定的成员。即使有一个更具体的类实例分配给该属性。