2016-11-22 87 views
0

我想創建一個列表,其中包含我的遊戲中產生的所有不同單位的所有對象,但它們不是全部相同的類。如果有幫助,它們都是主要單元類的子類。但基本上我有一個基本功能的主要單元類,然後更多的是劍客,派克曼等,我希望能夠將所有不同類型放在一個列表中,以便能夠更輕鬆地管理它們。那可能嗎?C# - 不同類型的對象列表

+0

但是,這不會有從它的子類的信息會呢? –

+0

當然可以,你可以添加完整的對象。您必須將其轉換爲首選對象才能獲取它。 – NikxDa

+0

最好創建對象列表清單。如果您需要遍歷所有對象,開銷將會非常小(遍歷主列表中的每個列表),但在自己的列表中遍歷一個特殊的對象類型將會快得多,並且遍歷一個包含所有對象的大列表。 – crea7or

回答

3

是的,這是可能的。

正如Rob在他的評論中所說的,你需要製作一個List<SharedBaseClass>

var someList = new List<SharedBaseClass>(); 

當你試圖與列表中的某個特定元素,你需要轉換回到正確的子類交互:

// throws an exception if type wrong 
var someElement = (desiredSubClass) someList[someElementIndex]; 

// return null if type wrong 
var someElement = someList[someElementIndex] as desiredSubClass; 
+3

更安全地做'var someElement = someList [index] DesiredSubclass',然後對'someElement'進行空檢查。或者,'someList.OfType ()'獲取所有元素的一個特定派生類型 – KMoussa

+0

@KMoussa謝謝,我更新了我的答案! – Slvrfn

1

Slvrfn的前面回答應該能正常運行。如果您不喜歡投射,或者您關心在Unity中投射效果時,還可以在子類中創建一個變量,並使用this關鍵字在constructor中對其進行初始化。

比方說,你有你繼承兩個類:

public class FirstBase 
{ 
    public int speed = 50; 
} 

public class SecondBase : FirstBase 
{ 
    public int live = 5; 
} 

然後你的子類:

public class MySubClass : SecondBase 
{ 
    public FirstBase firstBase; 
    public SecondBase secondBase; 

    public MySubClass() 
    { 
     firstBase = this; 
     secondBase = this; 
    } 
} 

您不需要再投。您可以使用MySubClass中定義的firstBase和secondBase變量。

List<MySubClass> subClass = new List<MySubClass>(); 
subClass.Add(new MySubClass()); 

FirstBase firstBase = subClass[0].firstBase; 
SecondBase secondBase = subClass[0].secondBase; 
+0

這個問題是我想要基本上有一個單位類型的數組,所以我可以給他們打電話,他們不是每個頂級的子類 –

+0

嗯,你說他們是你的問題的子類。 TBH,如果你想有一個很好的答案,請在下次提問時提供一個代碼。你提供的樣本會告訴人們你在做什麼。 – Programmer