2017-08-18 18 views
0

私はC#WinFormアプリケーションを開発していますが、私は立ち往生しており、どの方法が先に進むべきかわかりません。 Algorithmのすべての派生クラスは、それがBlockの派生クラスを所有していているが、私はそれが一般的でasbtract class AlgorithmList<Block> BlockListからアクセスできるようにしたい。ここでは、コード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 // ?? 
} 

の抜粋だ私は、状況は非常に簡単だと思います。私はそれが一般的な状況だと思うし、解決策があると確信しています。

おかげで、事前

+3

ジェネリックを使用しますか? '抽象クラスアルゴリズムここでT:Block'、次に' class AAlgorithm:Algorithm 'など – Lee

+0

訪問者パターンを適用できるケースのようです。 – CShark

答えて

0

に私は何かが欠けているかもしれないが、あなたはそれ抽象プロパティ作ることができませんでしたか?アルゴリズムから派生したクラスを書くときに、BlockList.getが実装されていない限り、その後、それがコンパイルされません

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

...:唯一の傷について

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

があれば、そのコードですAlgorithmA内でBlocksプロパティを使用したい場合は、(ABlock)としてキャストする必要があります。