如何创建包含所有派生类信息的静态数组

时间:2014-08-26 17:34:26

标签: c# interface derived-class

我有一个名为Species的接口,以及包含每个物种的派生类,其中包含有关物种的文字信息。见下文:

public interface Species
{
    string database { get; }
    string genus { get; }
    string binomialName { get; }
}

public class Monosiga_brevicollis : Species
{
    public string database { get {return "monosiga";} }
    public string genus { get {return "Choanoflagellatea";} }
    public string binomialName { get {return "Monosiga_brevicollis";} }
}

public class Amphimedon_queenslandica : Species
{
    public string database { get {return "queenslandica";} }
    public string genus { get {return "Porifera";} }
    public string binomialName { get {return "Amphimedon queenslandica";} }
}

这允许我将一个物种分配给一个物体,然后获得有关该物种的数据库位置或该物种属的信息。

如何对所有派生类Speices执行操作。例如:

1)创建一个函数:

public bool isSpecies(string binomial)

允许我通过检查二项式名称来检查输入的字符串是否是预编码物种之一。

和2)创建一个列表

string[] allSpecies;

包含数组中的所有二项式名称,因此我可以将该数组用作文本框的默认选项等。

1 个答案:

答案 0 :(得分:3)

看起来这些应该是ISpecies接口的实现的实例,而不是单独的类。如下所示:

public class Species : ISpecies
{
    public string database { get; set; }
    public string genus { get; set; }
    public string binomialName { get; set; }
}

var speciesList = new List<ISpecies>()

var monosiga = new Species() {
    database = "monosiga",
    genus = "Choanoflagellatea",
    binomialName = "Monosiga_brevicollis"
}

speciesList.Add(monosiga);

一旦您填写了列表,就可以枚举二项式名称,如下所示:

var names = speciesList.Select(s => s.binomialName);

您还可以通过执行以下操作检查列表中是否存在物种:

bool IsSpecies(string binomialName) {
    _speciesList.Any(s => s.binomialName == binomialName);
}