デリゲートと継承
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); } |
注意事項: |
---|
delegate の宣言、delegate の型を持つプロパティ、対応するメソッドの名前には以下の関係があります。
|
Processor オブジェクトでは計算順序の決定前後や実行時の代数計算、積分計算の前後で利用者がその時々の状態を確認できるように様々な継承可能なメソッドや delegate が用意されています。詳細はProcessorを参照してください。