我是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中开始的,因此不习惯对变量类型的严格行为)。
我有什么选择,我应该使用哪种数据类型,或者我必须以完全不同的方式实现这一点?
希望你能提供帮助。
答案 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
。通过一点反思,可以很好地解决。
您也可能拥有多组不同的项目,每组都可以实现相同的界面,然后该界面可以是您在列表中保存的内容。