如何在列表中处理具有重写的通用类型的派生类?

时间:2017-07-13 14:25:02

标签: c# class design-patterns derived

我想创建一个资源管理器,其中包含自定义类型的派生资源类,如Texture1D,Texture2D等。因此,我想从父类重写泛型类型,因此我能够返回资源数据而不从宾语。 (此解决方案也可以使用结构)。

如果上面的文字有点不清楚,请参阅此方法:

我创建了一个接口IResource。 (1)
然后是实现此接口的抽象类。 (2)
最后是我的自定义资源,它源自Resource<T>。 (3)

//1
public interface IResource : IDisposable

//2
// This class returns Data as T
public abstract class Resource<T> : IResource 

//3
// This class returns Data as GLEXTexture2D
public class Texture2DResource : Resource<GLEXTexture2D>

基本上,我有一个ResourceManager,其列表为IResource,可以添加如下资源:

Texture2DResource resource = new Texture2DResource("a path", ResouceThreadAccess.LOCAL);
resourceManager.RegisterResource(resource);

这是一个可接受的设计决定吗?在我的观点中,通用覆盖代码在创建新资源时看起来有点混乱。有没有更好的方法来解决这种三重传承?

1 个答案:

答案 0 :(得分:1)

我经常使用上面的模式(即:接口,具有抽象基类,以及实际的类本身)。要回答是否可以接受的设计决定,这取决于你想要达到的目标(尽管通常它是一个很好的设计)......

使用resourceManager,您可以遍历它们并在接口中调用该方法(您可以在其中覆盖子对象中的不同实现)。这样,您甚至不必担心来自&#39;对象&#39;

但是,如果你有很多特定于孩子的课程,这意味着从resourceManager开始你需要识别特定的儿童课程 - 那么“通用”课程就是这样。自然和抽象基类可能没那么多。

相关问题