我不确定我的问题是什么正确的英语单词,所以我认为最好在代码中说明它.我有一个基本的,抽象的Windows窗体类,我用它来创建许多用于类似目的的派生Windows窗体.在我们将调用的抽象基类中,Alfred我有一个类型的数组Buddy.有时候,当我想继承时Alfred,我也想要Buddy使用特定于新派生形式的一些功能来覆盖类AlfredJunior.
所以,在类的定义中Alfred:
protected Array<Buddy> importantArray;
Run Code Online (Sandbox Code Playgroud)
我想要的AlfredJunior是这个:
private class BuddyJunior : Buddy
{
public int newField;
// Constructors omitted
}
protected Array<BuddyJunior> importantArray;
Run Code Online (Sandbox Code Playgroud)
我希望定义的方法Alfred能够访问和使用元素,importantArray就像它们是类型一样Buddy,而不是BuddyJunior.但是我只需要BuddyJunior在继承的表单中添加一些额外的功能(一个额外的字段)AlfredJunior.这是怎样的正确方法?
这就是你需要的:
public abstract class Alfred<B> where B : Buddy
{
protected B[] importantArray;
}
public class Buddy { }
public class BuddyJunior : Buddy
{
public int newField;
}
public class Alfred : Alfred<Buddy> { }
public class AlfredJunior : Alfred<BuddyJunior> { }
Run Code Online (Sandbox Code Playgroud)