2017-10-20 31 views
-1

我不確定我是否適當地說了我的問題,但考慮以下情況:如何在C#中有多個派生類型的單個數據集合?

我有一個叫做Card的抽象類。 Card類包含許多成員。我有一個從Card稱爲BlueCardRedCard獲得兩班。想象這個:

public abstract class Card{ 
    //many members 
} 

public class BlueCard : Card{ 
    //many members 
} 

public class RedCard : Card{ 
    //many members 
} 

現在,假設我有一個類DeckDeck需要同時包含BlueCardRedCard的單個陣列。有沒有辦法去解決這個問題?

+1

制卡的數組,然後轉換爲你需要像* VAR值無論何種類型=數組[0] BlueCard; * - 如果結果爲null,則價值是* RedCard *,因此你應該這樣做,但是使用* RedCard *。在我的辯論中沒有真正的「漂亮」的方式來做到這一點。如果你可以避免不得不施放,並簡單地使用*卡*,這將是最好的。看作*卡*是抽象的,你可以很容易地用抽象的方法做到這一點。 – Bauss

+0

@Bauss謝謝!這就是我的想法。讓我問你:如果'Card'是一個接口而不是抽象類?我會製作一系列'ICard'並做同樣的事情嗎? – ic3man7019

+1

是的,它會是完全相同的模式。 – Bauss

回答

0

我使用了類似的情況我這種做法,其中一個ElementGroup對象包含兩種類型元素或類型的元素中派生的對象的集合。我覺得這樣的事情應該適合你的情況:

public class Deck { 
    public Deck() { 
     _cardArray = new Card[52]; 
    } 

    private Card[] _cardArray; 

    public void DrawCard(int cardNumber) { 
     var card = _cardArray[cardNumber]; 
     if (card.GetType() == typeof(Card)) { 
      // Do something 
     } 
     else if (card.GetType() == typeof(BlueCard)) { 
      // Do something 
     } 
     else if (card.GetType() == typeof(RedCard)) { 
      // Do something 
     } 
    } 
} 
相關問題