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

如何创建支持任意ResourceType的ResourceStorage泛型类集合?

解决方案

1. 新增非泛型标记接口

给所有泛型ResourceStorage实例定义一个非泛型的公共接口,作为集合存储的统一类型,这样就能容纳任意ResourceType的ResourceStorage实例。

示例代码:

// 定义非泛型标记接口,无需任何成员
public interface IResourceStorage { }

// 让泛型ResourceStorage实现这个接口
public class ResourceStorage<ResourceType> : SpacecraftProperty<ResourceStorage<ResourceType>>, IResourceStorage 
    where ResourceType : ResourceInfo
{
    // 保留你原有的实现逻辑
}

// 现在可以创建统一的集合
var allStorages = new List<IResourceStorage>();
// 任意ResourceType的实例都能加进去
allStorages.Add(new ResourceStorage<FuelResource>());
allStorages.Add(new ResourceStorage<OxygenResource>());

2. 调整继承链复用非泛型基类

如果你的SpacecraftProperty<T>原本没继承非泛型的SpacecraftProperty,可以修改继承关系,让泛型类继承自非泛型基类,这样直接用非泛型基类作为集合的元素类型。

示例代码:

// 非泛型抽象基类
public abstract class SpacecraftProperty { }

// 泛型抽象类继承非泛型基类
public abstract class SpacecraftProperty<T> : SpacecraftProperty { }

// ResourceStorage保持原有泛型继承
public class ResourceStorage<ResourceType> : SpacecraftProperty<ResourceStorage<ResourceType>> 
    where ResourceType : ResourceInfo
{
    // 你的实现代码
}

// 直接用非泛型基类集合存储
var allStorages = new List<SpacecraftProperty>();

3. 协变接口(需访问泛型成员时用)

如果后续需要从集合中取出实例并访问ResourceType相关的属性/方法,可以定义一个协变接口,这样集合能兼容所有ResourceInfo的子类实例。

示例代码:

// 带out关键字的协变接口,允许子类接口赋值给父类接口
public interface IResourceStorage<out ResourceType> where ResourceType : ResourceInfo
{
    // 只定义只读成员,协变不支持写入操作
    ResourceType GetResourceInfo();
}

// 让ResourceStorage实现该协变接口
public class ResourceStorage<ResourceType> : SpacecraftProperty<ResourceStorage<ResourceType>>, IResourceStorage<ResourceType> 
    where ResourceType : ResourceInfo
{
    public ResourceType GetResourceInfo()
    {
        // 返回对应ResourceType的实例
        return default;
    }
    // 其他实现逻辑
}

// 集合类型用父类接口
var allStorages = new List<IResourceStorage<ResourceInfo>>();
// 子类ResourceType的实例可以直接添加
allStorages.Add(new ResourceStorage<FuelResource>());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:15:17