如何在抽象类中声明任何类型的数组(派生自给定类型)

本文关键字:类型 派生 数组 抽象类 声明 任何 | 更新日期: 2023-09-27 18:34:40

我不确定我的问题的正确英语单词是什么,所以我认为最好用代码来说明它。我有一个基本的抽象 Windows 窗体类,用于创建许多用于类似用途的派生 Windows 窗体。在抽象基类(我们称之为Alfred(中,我有一个类型为 Buddy 的数组。但有时,当我想继承Alfred时,我还想使用特定于新派生形式的一些功能覆盖类BuddyAlfredJunior .

因此,在类Alfred的定义中:

protected Array<Buddy> importantArray;

我想要AlfredJunior的是:

private class BuddyJunior : Buddy
{
    public int newField;
    // Constructors omitted
}
protected Array<BuddyJunior> importantArray;

我希望 Alfred 中定义的方法可以访问和使用 importantArray 的元素,就好像它们是 Buddy 类型一样,而不是 BuddyJunior .但是我只需要在继承形式AlfredJunior BuddyJunior中增加一点额外的功能(一个额外的字段(。正确的方法是什么?

如何在抽象类中声明任何类型的数组(派生自给定类型)

这是你需要的:

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