Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在抽象类中声明任何类型(从给定类型派生)的数组?_C#_Inheritance - Fatal编程技术网

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

C# 如何在抽象类中声明任何类型(从给定类型派生)的数组?,c#,inheritance,C#,Inheritance,我不确定我的问题的正确英语单词是什么,所以我认为最好用代码来说明。我有一个基本的、抽象的Windows窗体类,我用它来创建许多用于类似目的的派生Windows窗体。在抽象基类中,我们称之为Alfred,我有一个类型为Buddy的数组。但有时,当我想继承Alfred时,我还想用新派生形式AlfredJunior特有的一些功能覆盖类Buddy 因此,在类Alfred的定义中: protected Array<Buddy> importantArray; 我希望在Alfred中定义的方法

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

因此,在类
Alfred
的定义中:

protected Array<Buddy> importantArray;
我希望在
Alfred
中定义的方法能够访问和使用
importArray
的元素,就像它们属于
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> { }
公共抽象类Alfred其中B:Buddy
{
受保护的B[]进口;
}
公共类伙伴{}
公营班小伙伴:小伙伴
{
纽菲尔德公共图书馆;
}
公共课阿尔弗雷德:阿尔弗雷德{}
公共课阿尔弗雷德初级:阿尔弗雷德{}

我不知道你可以这样使用where关键字,非常感谢你的提示@bakester14-看一看:嗨@Enigmativity我现在只是再看一遍你的代码,我还在研究这个问题,我想知道我是否可以问:你发布的代码中倒数第二行是做什么的?@bakester14-你是指
公共类Alfred:Alfred{}
?它将替换现有的
Alfred
类。
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> { }