c#派生类列表

时间:2017-08-18 15:56:34

标签: c# polymorphism derived-class derived-types

我正在为工作开发一个C#WinForm应用程序,但是我被困住了,我不知道哪种方法最好继续下去。这是一段代码

class Block()
{
   // generic Block properties
}

class ABlock() : Block
{
    // specific ABlock stuff
}

class BBlock() : Block
{
    // specific BBlock stuff
}


abstract class Algorithm()
{
   // generic Algorithm properties
   abstract List<Block> BlockList // ??
}

class AAlgorithm() : Algorithm
{
    // specific AAlgorithm stuff
    List<ABlock> BlockList // ??
}

class BAlgorithm() : Algorithm
{
    // specific BAlgorithm stuff
    List<ABlock> BlockList // ??
}

我认为情况非常简单:Algorithm的每个派生类都有自己派生的Block类,但我希望将其设为通用的,并且可以List<Block> BlockList在{asbtract class Algorithm中访问1}}。我认为这是一种常见的情况,我确信有一个解决方案。

提前致谢

1 个答案:

答案 0 :(得分:0)

我可能会遗漏一些东西,但你不能把它变成一个抽象的财产吗?

abstract class Algorithm()
{
   abstract List<Block> BlockList { get; }
}

...然后,当编写一个派生自Algorithm的类时,除非实现了BlockList.get,否则它不会编译:

public class AlgorithmA : Algorithm
{
    public override List<Block> Blocks
    {
        get
        {
            return new List<Block> { new ABlock(), new ABlock() };
        }
    }
}

关于唯一的缺陷是,如果AlgorithmA中的代码想要使用Blocks属性,则可能需要强制转换为(ABlock)。