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

时间:2016-09-27 09:48:00

标签: c# oop inheritance

好的,我有一个小打嗝。

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

基本上,我的结构与此类似:

interface IBase<MemberType>;

abstract class Base : IBase<OneMemberType> {

  protected OneMemberType member;
  public void init() {
    member = new OneMemberType();
  }
}


class Extended: Base, IBase<AnotherMemberType> {

}

我希望扩展课程有一个&#34;成员&#34; &#34; AnotherMemberType&#34;的属性类型。

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

我是如何做到的,没有在Extended类中明确定义它?

这是实际的界面。

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

    void generate();
}

更新

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

更新2 好吧,它显然与接口无关。我想要的是一个通用基类成员,可以在扩展子类中分配一个类型。

1 个答案:

答案 0 :(得分:1)

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

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

重点是,您的类中不能有2个具有相同签名的方法,并且CLR知道要使用哪个方法。

编辑:阅读完评论后,您将尝试解决问题:

您的TextureProviders中的BaseLayer +继承中的泛型类型参数不会起作用吗?看起来像这样:

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>
{
}

或者,您可以使用工厂模式。