You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在基类中实现泛型List,使子类可指定具体元素类型?

解决方案:通过泛型基类实现子类专属类型集合

你的代码核心问题是基类未定义泛型参数,导致List<T>无法被编译器识别,且子类继承时未绑定具体的集合元素类型。以下是可运行的修正方案:

1. 改造基类为泛型类

将DynamoObject声明为泛型类,指定类型参数T,同时完善Objects属性的访问器并初始化集合(避免空引用异常):

public class DynamoObject<T>
{
    public int PlayerId { get; set; }
    public List<T> Objects { get; set; } = new List<T>();
}

2. 子类继承时绑定具体类型

让每个子类继承泛型基类时,传入对应的实体类型,明确集合元素的类型:

public class PlayerUnitDynamo : DynamoObject<PlayerUnit> { }

public class PlayerBuildingDynamo : DynamoObject<PlayerBuilding> { }

3. 实体类保持不变

你的PlayerBuilding和PlayerUnit类无需修改:

public class PlayerBuilding
{
    public int BuildingID { get; set; }
}

public class PlayerUnit
{
    public int UnitID { get; set; }
}

4. 测试方法正常运行

现在AddItems方法可以正确添加对应类型的对象,编译器会自动校验类型合法性:

public void AddItems()
{
    var unitDynamo = new PlayerUnitDynamo();
    unitDynamo.Objects.Add(new PlayerUnit());

    var buildingDynamo = new PlayerBuildingDynamo();
    buildingDynamo.Objects.Add(new PlayerBuilding());
}

方案说明

泛型基类DynamoObject<T>既复用了PlayerId这类通用属性,又让每个子类拥有专属类型的集合,保证了类型安全,避免了强制转换可能引发的运行时错误。

内容的提问来源于stack exchange,提问作者DidIReallyWriteThat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:42:55