2014-02-24 44 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 [];

相关问题