'宣言 Public Class UCReference Implements IUltraCalcReference
public class UCReference : IUltraCalcReference
UCReference は、元のオブジェクトを指し示す内部 IUltraCalcReference クラスインスタンスをラップします。つまり、各メソッドは、オブジェクトが接続されていれば IUltraCalcReference の要求をそのまま基本参照に渡し、接続されていなければ該当するエラーをスローします。UCReference は、参照文字列と、その基本参照オブジェクトを保持します。
UCReference には、Connect と Disconnect という2つの追加メソッドがあります。
Connect は、基本参照の CreateReference メソッドを呼び出して参照文字列を渡すことにより、参照オブジェクトへの参照を取得しようとします。参照の取得が成功した場合は、新しく作成された参照が保持され、その参照を使用してIUltraCalcReferenceの要求がディスパッチされます。
Disconnect は内部参照オブジェクトを解放します。参照オブジェクトを解放すると、その IUltraCalcReference メソッドは非接続状態に対処することになります。
ほとんどすべての参照が、有効期間内のある時点で非接続状態になる可能性があります。したがって、CalcEngine は UCReference インスタンスを使用してすべての参照に接続します。つまり、UltraCalcFormulaCompiler.Compileメソッドは式文字列に含まれるすべての参照についてUCRefernceを作成します。CalcEngine は、オブジェクトがトポロジの変更通知に使用する TopoChange イベントを公開しています。TopoChangeイベントは、変更されたオブジェクト (列、行、グリッドなど) を表す参照を、Create/Deleteアクション引数と共にCalcEngineに渡します。
Delete イベントでは、CalcEngine は、左辺が非接続参照に含まれるすべての式を追跡し、それらを削除します。これにより、削除された参照の下位参照を含むすべての参照の再計算チェインと祖先マップがクリーンアップされます。つまり、Deleteイベントによって削除される参照がグリッド全体の場合は、列式が削除されます。 また、削除される参照が列の場合は、再計算チェイン上のセル参照が削除されます。特定の参照がこのイベントによって影響を受けるかどうかは、TopoChangeイベントで渡された参照のContainsReferenceによって決定されます。次に、削除された参照を参照するすべての式が再計算されます。
Create イベントでは、CalcEngine は作成された参照に含まれるすべての参照を追跡し、Connect メソッドを呼び出して、それらの式の BaseReference を渡します。これにより、CalcReferenceが基本参照に再接続されます。次に、再接続された各参照の祖先が再計算されます。