继承同一接口的不同实现的子类

本文关键字:实现 子类 接口 继承 | 更新日期: 2023-09-27 18:08:56

好的,我有一个小嗝。

我想实现一个具有泛型参数类型的接口,然后用另一个参数类型扩展该实现,而不必重新进行初始化。

基本上,我有一个类似的结构:

interface IBase<MemberType>;
abstract class Base : IBase<OneMemberType> {
  protected OneMemberType member;
  public void init() {
    member = new OneMemberType();
  }
}

class Extended: Base, IBase<AnotherMemberType> {
}

我希望类扩展具有"AnotherMemberType"类型的"成员"属性。

AnotherMemberType和OneMemberType都实现了相同的接口。

任何想法我怎么能做到这一点,没有显式地定义它在扩展类?

这是实际的接口。

interface ILayer<TextureProviderType>
{
    Texture2D getTexture();         
    byte[,] getArray();              
    void generate();
}

我试图有特定的对象扩展BaseLayer类,每个使用特定的TextureProvider子,只需要实例化基类中的纹理提供程序。

更新2 它显然和界面无关。我想要的是一个泛型基类成员,它可以在扩展的子类中被分配类型。

继承同一接口的不同实现的子类

您只需实现一次接口方法,它将适用于两个接口。

如果你希望每个接口都有不同的实现,你必须使用显式实现,或者在接口方法的签名中使用泛型类型参数。

关键是,你不能在你的类中有两个具有相同签名的方法,并且让CLR知道该使用哪个。


编辑:在阅读你想要解决的问题的评论后:

在你的BaseLayer +继承在你的TextureProviders的泛型类型参数不会工作吗?看起来像这样:

class TextureProvider
{
    public TextureProvider()
    {
    }
    public void Foo()
    {
    }
}
class SpecialTextureProvider : TextureProvider
{
    public SpecialTextureProvider()
        : base()
    {
    }
}
class BaseLayer<TP> where TP : TextureProvider, new()
{
    public BaseLayer()
    {
        var tp = new TP();
    }
}
class SpecificLayer : BaseLayer<SpecialTextureProvider>
{
}
或者,您可以使用工厂模式。