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)
这是为什么?我以为我创造了一个鸡尾酒课,而不仅仅是一杯饮品?我究竟做错了什么?
谢谢!
您不能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类指定的成员.即使实际上有一个更具体的类实例分配给该属性.
| 归档时间: |
|
| 查看次数: |
7687 次 |
| 最近记录: |