3

コード内に、依存している他の変数が変更されたときに変数が自動更新される場所が必要です。

スプレッドシートとの違いは、すべての解析を行う必要はなく、プログラムのコンパイル後に数式や変数を更新する必要がないため、すべてをコードで実行することです。

基本的に入力データがあり、スプレッドシート部分のいくつかの「セル」がそれらの値をリッスンして変更し、変更は「スプレッドシート」部分に伝播します。通常のスプレッドシートのように。

したがって、最初にすべての変数を正しく更新するためにあらゆる種類のコードを記述する必要がなく、すぐにこれらすべての値に依存することができます。これは非常に困難です。

誰かがこれを実装するための思考プロセスで私を助けることができれば、それは本当に役に立ちます!私はいくつかのスプレッドシートのソースコードを読んでいますが、それを理解し、次にそれらのアイデアを私が行う必要があることに合うように変更する方法を理解するには長い時間がかかります。

編集:今、私はループに物事があり、すべてが正しく構造化されているので、次のように正しく更新されます:

A1 = 2;
B1 = A1 + 2;

次に、これは何度も何度もループします。しかし、物事を自動的に更新したい場合、変数に添付された計算をどのように保存しますか?したがって、Bを更新すると、A1 + 2が呼び出されますか?

ちなみに、A1とB1は単なる確率変数です。私はセル名で名前を付けるのではなく、そのような構造はありません。

4

1 に答える 1

1

計算を保存する1つの方法は、C#に組み込まれている関数型プログラミングの要素を使用することです。

Func<T1,T2,...TResult>数式は、デリゲートの1つを使用して、関数として保存できます。

var CalculationForX = new Func<double, double, double>( 
    (arg1, arg2) => arg1 * arg2
);

ここでは、CalculationForX2つのdoubleを取り、2つのdoubleの積を返す関数を指定します。次に、たとえばを使用するとCalculationForX(5, 2)10が返されます。


したがって、すべての依存関係を追跡する簡単な方法は、各従属変数のオブジェクトを、その式と入力を含めて格納することです。これらは次の形式である可能性があります。

  • 特定のオブジェクトのプロパティ名を含む文字列の配列
  • PropertyInfo配列_
  • Action<T1,T2>デリゲートは実際のプロパティセッターを表します

プロパティ変更イベントを受信するたびに、それに依存するすべての変数の計算と入力を取得し、ターゲット値を更新します。

(昨日プログラマーに非常によく似た質問をしたので、あなたがこの質問をしたのは私にとって面白いです。)

于 2012-10-27T18:06:59.877 に答える