2014-02-24 43 views
1

數組或鏈表如何包含不同的對象作爲元素?這怎麼能在C#或C++中完成?數組如何包含不同的對象作爲元素?

+0

我不明白你在問什麼。你能詳細說明一下嗎? – Aheho

+0

爲什麼不在C#中創建'object'列表?在C++中,你總是可以使用'void *'的數組或者''vector''來放入任何東西。但確切的答案將取決於您的需求。 –

回答

3

數組可以包含不同類對象的唯一方法是它們全都具有公共基,並聲明該數組包含該公共基。例如,你可以有3類是這樣的:

class MyBase { 
    public int SomeParameter { get; set; } 
} 

class MyFirstChild : MyBase { 
    public int SomeOtherParameter { get; set; } 
} 

class MySecondChild : MyBase { 
    public int SomeOtherParameter { get; set; } 
} 

和你的數組聲明如下:

MyBase[] myArray = new MyBase[3]; 

現在你可以把MyBase類型或其子女的不同物體進入此陣,像這樣:

myArray[0] = new MyBase(); 
myArray[1] = new MyFirstChild(); 
myArray[2] = new MySecondChild(); 

,如果所有的人都將實施一些接口,而不是從MyBase繼承同樣會工作。

+0

你打我吧,生病刪除我的答案 –

+0

你爲什麼不離開你的?誰知道哪一個更適合OP。 –

+0

這就是我需要的!謝謝! – user3015999

3

那麼使用C#,你可以聲明一個接口,這兩種類型實現接口:

public interface IType 
{} 

public class Thing : IType 
{} 

public class Thing2 : IType 
{} 


List<IType> list = new List<IType>(); 

list.Add(new Thing1()); 
list.Add(new Thing2()); 
+0

謝謝你的回答! – user3015999

1

在C++中,它不能。但是,它可以包含:

  • 使用公共基類指向不同對象。如果您希望容器管理這些對象的生命週期(就像它直接包含它們那樣),然後存儲智能指針。
  • 歧視聯盟或類似的變體類型。 Boost庫提供variant(靜態指定的一組類型的聯合)和any(一個多態封裝來保存任何類型)。

我對C#一無所知,但我想你可以做類似於這些的事情。

0

使用一組void指針

void * ptr [];

相關問題