C# - 不同类型对象的列表

时间:2016-11-22 23:08:02

标签: c# unity3d

我想创建一个列表,其中包含我在游戏中生成的所有不同单位的所有对象,但它们并非都是同一个类。它们都是主要单元类的子类,如果这有帮助的话。但基本上我有一个基本功能的主要单元类,然后更多的剑士,长枪手等,我希望能够将所有不同的类型放在一个列表中,以便能够更轻松地管理它们。这可能吗?

2 个答案:

答案 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;