申し訳ありませんので、TFruit
という基本クラスがあります。これには、TApple
,TOrange
などの様々な子孫があります。子孫クラスのプロパティをファイルに保存する必要があります。固有の整数値をクラスに関連付ける必要があります
データをロードするときに正しいクラスを作成できるようにするには、実際のデータを書き込む前に各クラスにファイルに書き込むID
が必要です。現在、私はそれをやって、次の方法を作ってみた:
type
TFruit = class
const ID = 0;
end;
TApple = class(TFruit)
const ID = 1;
end;
TOrange = class(TFruit)
const ID = 2;
end;
テストこれを、私は私が宣言されたクラスのスーパーに注意する必要があることが分かりました。私はこれを使用する場合:
var Fruit: TFruit;
Fruit := TOrange.Create;
...その後Fruit.ID
はゼロを返します。しかし、TOrange
としてFruit
を宣言することは(誰もがなぜ知っている?)期待される結果が得られますFruit.ID = 2
だから、基本的に、私はこの権利を行うか、またはそれを行うには良い方法はありますでしょうか?クラス関数を作成しそこから値を返さなければならないのは、比較(関数宣言、実装、コードの追加)によって非常に醜いようです。あなたは、することはできません
便宜上、そのクラスのIDを返す登録されたオブジェクトの基底クラスにクラスメソッドを追加することができます。そして、クラスメソッド(C#スタイル静的メソッドとは異なります)はクラスタイプを 'self'パラメータとして受け取るので、これは期待通りに機能します。 – CodesInChaos
@CodeInChaos、しかし、それは、各クラスがそれを避けることができるIDを「知っている」ことを必要とし、次の利用可能なIDが何であるかを突き止める際に新しい子孫を作成する苦痛になる可能性があります。 –
いいえ、私はこのメソッドがあなたの 'FindID'関数を' self'をparamとして呼び出すことを意味します。しかし、シリアライザの実装の詳細と考えることができるので、クラス自体がIDを知らないと構造的に優れている可能性があります。 – CodesInChaos