我想创建一个列表,其中包含我在游戏中生成的所有不同单位的所有对象,但它们并非都是同一个类。它们都是主要单元类的子类,如果这有帮助的话。但基本上我有一个基本功能的主要单元类,然后更多的剑士,长枪手等,我希望能够将所有不同的类型放在一个列表中,以便能够更轻松地管理它们。这可能吗?
答案 0 :(得分:3)
是的,这是可能的。
罗布在评论中说,你需要制作一个List<SharedBaseClass>
。
var someList = new List<SharedBaseClass>();
当您尝试与List中的特定元素进行交互时,您需要转换回正确的子类:
// throws an exception if type wrong
var someElement = (desiredSubClass) someList[someElementIndex];
// return null if type wrong
var someElement = someList[someElementIndex] as desiredSubClass;
答案 1 :(得分:1)
Slvrfn 的anwer应该可以正常工作。如果您不喜欢强制转换,或者在Unity中进行强制转换时关注性能问题,您还可以在子类中创建一个变量,并使用constructor
关键字在this
中对其进行初始化。
假设你有两个继承的课程:
public class FirstBase
{
public int speed = 50;
}
public class SecondBase : FirstBase
{
public int live = 5;
}
然后你的子类:
public class MySubClass : SecondBase
{
public FirstBase firstBase;
public SecondBase secondBase;
public MySubClass()
{
firstBase = this;
secondBase = this;
}
}
你不再需要施放。您可以使用MySubClass
中定义的firstBase和secondBase变量。
List<MySubClass> subClass = new List<MySubClass>();
subClass.Add(new MySubClass());
FirstBase firstBase = subClass[0].firstBase;
SecondBase secondBase = subClass[0].secondBase;