Dsl (Digital Simulation Library) for .Net

ここではDslで使用されているデリゲートと継承の関係について説明します。

このトピックスは以下のセクションを含みます。

デリゲートと継承

Variable オブジェクトには ComputeValueAt プロパティにデリゲート(delegate)を設定して値を計算する計算式を定義できることは既に記述しました。 Processor も delegate の型を持つプロパティをいくつか実装しています。

delegate は実行時、動的に設定するものです。 Dsl には delegate の型を持つプロパティと同じ動作をする virtual なメソッドも用意されています。 プロパティに delegate を設定するか、対応するメソッドを override するかは自由ですが、 特に Variable の Value 等は、delegate で動的に定義するのが普通です。 各メソッドの名前は対応する delegate の名前の前に On を付けることで定義されています。引数は同じです。 例えば Variable の ComputeValueAt プロパティに delegate を設定する代わりに Variable の(virtualな) OnComputeValueAt メソッドを継承(override)してもかまいません。 基底(base)の処理は

 コピー イメージコードをコピー
public virtual double OnComputeValueAt(Processor pr, Variable self, double time, double step)
{
    if (ComputeValueAt == null)
    {
        // RESULT.ERROR_UNABLE_TO_COMPUTE: Name + "の値を計算する手段がありません。" のエラーを発生させる。
        ....
    }
    return ComputeValueAt(pr, self, time, step);
}
のようになっています。つまり継承が優先され、もし継承されていないか基底メソッド(base)が呼ばれた場合は delegate が呼ばれることになります。

注意事項:

delegate の宣言、delegate の型を持つプロパティ、対応するメソッドの名前には以下の関係があります。

  • プロパティ名 : xxxxx

  • delegate宣言:Atxxxxx

  • メソッド名 :Onxxxxx

Processor オブジェクトでは計算順序の決定前後や実行時の代数計算、積分計算の前後で利用者がその時々の状態を確認できるように様々な継承可能なメソッドや delegate が用意されています。詳細はProcessorを参照してください。

先頭へ

参照

先頭へ