可以是不同类型的变量的数据类型

时间:2016-05-07 03:53:02

标签: c# unity3d

我是C#的新手,但似乎注意到了我想用我的代码做的限制。

我有一个类,我想存储对我计划存储在列表中的其他类的引用。像这样:

myList.Add(new Node(1,1,referenceToClassA));
myList.Add(new Node(1,2,referenceToClassB));

所以我的班级看起来像这样:

public class Node : IHeapItem<Node> { //IHeapItem is for a heap i use for pathfinding

  public int x;
  public int y;
  public ??? reference;

  // constructor
  public Node(int a, int b , ??? r){
    x = a;
    y = b;
    reference = r;
  }

 // other unrelated stuff
}

正如你可能猜到的那样,我不知道我的班级中会有什么数据类型reference,因为它可以分配给不同的类。

我似乎无法在C#中找到是否存在灵活的数据类型(我是在JavaScript中开始的,因此不习惯对变量类型的严格行为)。

我有什么选择,我应该使用哪种数据类型,或者我必须以完全不同的方式实现这一点?

希望你能提供帮助。

3 个答案:

答案 0 :(得分:2)

有一个名为Object的类可以引用任何其他类。如果你想只是为了一小组类,你可能想要创建一个抽象类或接口。

答案 1 :(得分:1)

如果您尝试创建通用,请使用T作为参数类型。

如果您使用T作为参数类型,则必须将您的班级修改为Node<T>

否则,您可以使用dynamic

答案 2 :(得分:1)

如果每个列表中只有一种类型的项目,那么您可以使用它:

public class Node<T> : IHeapItem<Node> { //IHeapItem is for a heap i use for pathfinding

  public int x;
  public int y;
  public T reference;

  // constructor
  public Node(int a, int b , T r){
    x = a;
    y = b;
    reference = r;
  }

//其他不相关的东西 }

如果您不知道自己会得到什么,并且列表中有多个项目,那么您将被迫使用object。通过一点反思,可以很好地解决。

您也可能拥有多组不同的项目,每组都可以实现相同的界面,然后该界面可以是您在列表中保存的内容。