[英]C# Can't access base properties of a class (only inherited)
這是我的代碼(應該很容易理解我想要實現的目標):
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
屬性,因為您通過Drink
參考使用Coctail
實例。
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
類指定的成員。 即使實際上有一個更具體的類實例分配給該屬性。
您需要區分實際類型和聲明的類型。 在您的情況下,雖然您實例化一個cocktail
,但您將其稱為Drink
,它不會暴露任何屬性。
要訪問cocktail
類中定義的屬性,您需要輸入您的引用:
((cocktail)order.Drink).AlcoholContent = 4;
如果要獲取具體的類屬性,則必須顯式轉換為具體類型。
(order.Drink as Cocktail).AlcoholC ontent < - 工作正常
要么
您可以在Drink類中將虛擬財產保留為Alcoholicontent,並在雞尾酒類中覆蓋它。 然后,您可以訪問這些屬性。
你可以施展它。 嘗試:
Order order = new Order();
order.Drink = new cocktail();
(order.Drink as cocktail).AlcoholContent = 0 ; // please dont drink
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.