2017-04-30 14 views
1

私は現在、ロジックゲートをシミュレートするプロジェクト(楽しいため)に取り組んでいます。私はConnection.csとNot、And、Orのような他のクラスの親であるGate.csを持っています。私のGateクラスでは抽象メソッドEvaluateを使用して、入力と出力を設定して作業を終わらせます。最後に C#クラス間に双方向接続

public abstract class Gate : IConnectable { 

    private int[] inputs; 
    private int[] outputs; 

    protected Gate(int inputCount, int outputCount) { 
     inputs = new int[inputCount]; 
     outputs = new int[outputCount]; 
    } 

    ... 

    public abstract void Evaluate(); 
} 

public class Connection { 

    private IConnectable input; 
    private IConnectable output; 

    public Connection(IConnectable from, IConnectable to) { 
     input = from; 
     output = to; 
    } 

} 

は、私が門のオブジェクトが入力/出力されているその接続への参照が含まれているとの接続は「ワイヤの両端にあるかを知る必要がありする必要がありますする簡潔な方法を把握しようとしています"これを行う簡単な方法はありますか?

答えて

0

一般に、グラフを表現する方法が必要です。それを行うには多くの方法があります。

私は出発点として、このような設計を検討する:

interface IGate 
{ 
    bool Value { get; } 
} 

class And : IGate 
{ 
    public IGate X { get; private set; } 

    public IGate Y { get; private set; } 

    public bool Value 
    { 
    get 
    { 
     return X.Value && Y.Value; 
    } 
    } 

    public And(IGate x, IGate y) 
    { 
    X = x; 
    Y = y; 
    } 

} 

class Input : IGate 
{ 
    public bool Value { get; set; } 

    public Input(bool value) 
    { 
    Value = value; 
    } 

} 

例は次のとおりです。

new And(new Input(true), new And(new Input(true), new Input(false))).Value 
+0

ような何かを行います本当にうまくいくかもしれません。ツリーの下での再帰呼び出しと同様にゲートのシミュレーションを実行する予定だったので、私はグラフの考え方が好きです。 –

0

私は通常それのように聞こえるこの

public class Node { 

     private static List<Node> nodes = new List<Node>(); 
     private List<Node> inputs { get; set;} 
     private List<Node> outputs {get;set;} 

     protected Node() { } 
     protected Node(Node input, Node outPut) { 
      Node newNode = new Node(); 
      nodes.Add(newNode); 
      newNode.inputs.Add(input); 
      newNode.outputs.Add(output); 
     } 
    } 
関連する問題