2017-08-18 52 views
0

我正在開發一個C#WinForm應用程序的工作,但我卡住了,我不知道哪一個是最好的方式繼續下去。下面是代碼c#派生類的列表

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> BlockListasbtract class Algorithm。我認爲這是一種常見的情況,我相信有一個解決方案。

在此先感謝

+3

使用泛型? '抽象類算法其中T:塊'然後'類AA算法:算法'等 – Lee

+0

看起來像訪問模式可以應用的情況。 – CShark

回答

0

我可能失去了一些東西,但不能你把它抽象屬性?

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

...然後當,寫,從算法派生的類,它不會編譯除非BlockList.get實現:

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

關於唯一的缺陷是,如果代碼在AlgorithmA中想要使用Blocks屬性,可能需要將其轉換爲(ABlock)。