コンポーネントのプロパティは、定義された順序でロード(保存)されます。祖先のプロパティは、継承の順に最初にロードされます。
あなたのようなクラスの階層構造を持っている場合:ご自分のクラス階層にあなたが必要な場合は、だから、
object TSecondDescendant
First = 1
Second = 2
Third = 3
Fourth = 4
end
:
TBase = class(TComponent)
protected
FFirst: integer;
FSecond: integer;
published
property First: integer read FFirst write FFirst;
property Second: integer read FSecond write FSecond;
end;
TFirstDescendant = class(TBase)
protected
FThird: integer;
published
property Third: integer read FThird write FThird;
end;
TSecondDescendant = class(TFirstDescendant)
protected
FFourth: integer;
published
property Fourth: integer read FFourth write FFourth;
end;
そして、あなたはタイプTSecondDescendant
のインスタンスを作成し、ストリーミング、それはのようになります。 DefStyleAttr
を最初のものにするには、他のすべてのプロパティの前に公開する必要があります。あなたの階層がTFirstDescendant
で始まり、あなたはそのクラスにDefStyleAttr
を追加する必要がある場合は、それだけでストリーミングされます。例えば
あなたの階層がTBase
で始まる場合は、First
TBase = class(TComponent)
...
published
property DefStyleAttr: String read fDefStyleAttr write SetDefStyleAttr;
property First: integer read FFirst write FFirst;
property Second: integer read FSecond write FSecond;
end;
object TSecondDescendant
DefStyleAttr = 'abc'
First = 1
Second = 2
Third = 3
Fourth = 4
end
前にそれを追加する必要がありますafter properties of TBase
クラス。
TFirstDescendant = class(TBase)
...
published
property DefStyleAttr: String read fDefStyleAttr write SetDefStyleAttr;
property Third: integer read FThird write FThird;
end;
object TSecondDescendant
First = 1
Second = 2
DefStyleAttr = 'abc'
Third = 3
Fourth = 4
end
ストリーミングプロパティの順序に依存したコードを扱う際に懸念の一部に対処するために。
主な問題は、誰かが間違って公開プロパティの順序を変更したり、(非常にありそうもない)デルファイストリーミングシステムをいつか変更して間違えた場合でもそのコードが動作し続けることを確実にする組み込み(コンパイラ)注文をアップする。
コードが文書化されている場合、そのようなプロパティのある場所ははっきりとマークされ、注文が変更された場合に破損する単体テストがあれば、そのようなコードは安全に使用でき、誰でも書くことができる他のコード。
非常に最初の...定義するプロパティは、定義された順序でロードされます。祖先のプロパティは、継承の順に最初にロードされます。 –
'DefineProperties'メソッドをオーバーライドします。 – Victoria
@thanks dalija、それは答えでなければなりません:) – loki