簡體   English   中英

C#無法訪問類的基本屬性(僅繼承)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM