C#的ArrayList是如何实现的,一个数组可以存放不同类型的元素

我了解了 C++的模板后 了解了一下 C#中的 ArrayList C#中的ArrayList 可以放不同类型的元素 比如 一个 int 一个 string
我想知道 用C++ 的链表怎么实现 ?
就比如我创建一个 node 节点

template<typename E>class node{
public:
  E value;
  node* next;
}

如果这样 这个 node指针 只能指向 和自己类型相同的 node 也就是说 一串链表 只能 都是一种类型 至于什么类型可以在创建的时候选择,但只能都是一种
我之前提问过这个问题,
有人说 把 node* 改成 void* 那么我用 没法访问或者改变 next 了 (比如在链表中间插入一个链表);
就是 有位 说 C++的 RTTI 可以实现这个,还有什么类型字段 我在C++ primer plus 上看了看 RTTI 我还是有点不理解 RTTI是怎么实现这种功能的 如果用链表的话 这个node 是内部类 不能 给外面访问的,C# 和 java 中都有个 object 类 我不太懂 C++有没有这个

我是想这样的

img



```c++
struct ALN
{
    void *pdata;
    uint type;
    ALN *next;
};

......
    int a=1; //假定int 类型 type 为 0
    char b='3'; // type 为 1
    char str[]="hello word"; // type 为 2 
    //随便你怎么定

    ALN *head, *p;
    
    p=malloc sizeof ALN;
    p->pdata=malloc sizeof str;
    strcpy(...);
    p->type=2;
    head=p;

    p=malloc sizeof ALN;
    p->pdata=malloc sizeof a;
    *(int *)p->data=a;
    p->type=0;
    head->next=p;

```

大概就是这么个意思,写起来很繁琐,因为对于每种你都要分别处理,你可以运用模板判定类型的方式去完善这个类/结构,那么使用的人就不用去考虑类型的问题了。当然如果不怕繁琐的话,就是上面那样写了,读取值的时候根据type中的类型来决定它是int还是其他。建议你用模板完善它,感觉是个很有趣的东西,但是好像又不太用的着(个人感觉)。

简单说
C#的所有东西都继承于object,所以c#的arraylist 可以放不同的东西,因为那些东西都是object的子类或孙类。

之前回复过的就是你?那就当作是你吧,说你又不听。