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

bak*_*r14 3 c# inheritance

我不确定我的问题是什么正确的英语单词,所以我认为最好在代码中说明它.我有一个基本的,抽象的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.这是怎样的正确方法?

Eni*_*ity 7

这就是你需要的:

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)

  • @ bakester14 - 请查看:https://msdn.microsoft.com/en-us/library/d5x73970.aspx (2认同)