如何在基类中实现泛型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
相关产品推荐
相关产品推荐

