继承同一接口的不同实现的子类
本文关键字:实现 子类 接口 继承 | 更新日期: 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>
{
}
或者,您可以使用工厂模式。