2017-10-20 32 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 
     } 
    } 
} 
相关问题