好的,我有一个小打嗝。
我想实现一个带有泛型参数类型的接口,然后用另一个参数类型扩展该实现,而不必重新进行初始化。
基本上,我的结构与此类似:
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 好吧,它显然与接口无关。我想要的是一个通用基类成员,可以在扩展子类中分配一个类型。
答案 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>
{
}
或者,您可以使用工厂模式。