我正在为工作开发一个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}}。我认为这是一种常见的情况,我确信有一个解决方案。
提前致谢
答案 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)。