首页 > 解决方案 > C#泛型类作为泛型参数

问题描述

这是我生产所需资源的工厂的示例性实现:

public abstract class Resource<T> where T : ResourceObject
{
    protected string path = "base";
    public IEnumerable<T> payload;
    public Type resType = typeof(T);

    public T GetFirst()
    {
        return payload.First();
    }

}
public class ImageResource : Resource<Image>
{
    public ImageResource () : base()
    {
        path = path + "/image";
    }
}
public class RemoteResourcesFactory : ResourcesFactory
{
    public static T Get<T>() where T : Resource<ResourceObject>, new()
    {
        T resource = new T();
        resource.payload = load(resource.resType, resource.path); //here is some logic with instance
        return resource;
    }
}

当我尝试使用它时,会出现错误

Image image = RemoteResourcesFactory.Get<ImageResource>().GetFirst();

The type 'ImageResource' cannot be used as type parameter 'T' in the generic type or method 'RemoteResourcesFactory.Get<T>()'. There is no implicit reference conversion from 'ImageResource ' to 'Resource<ResourceObject>'

我是 C# 新手,想知道我失败的地方。或者可能是整体架构错误

标签: c#.netgenericscasting

解决方案


推荐阅读