2017-12-07 26 views
3

私は、Point/Rect/Bounds(など)のような関数がClassesとシステムTypesの両方で宣言されて実装されていることに気付きました。クラスと型単位の両方で宣言された "Point"/"Rect"/"Bounds"(など)のような関数はなぜですか?

理由はありますか?新しいDelphiのバージョンでも同じですか?古いバージョンでは

(私の推測では1が必要なときにClassesオーバーヘッドを回避するためにTypesユニットを使用することができることである)

+0

モジュール 'クラス 'には' Types'が含まれているので、あなたが推測する以外の理由があります。東京でも同じです(おそらく下位互換性のため)。 – Victoria

答えて

13

これらの型や関数はClassesで宣言されました。 RTLが開発されたとき、特にクロスプラットフォームをサポートするためには、これらのタイプがClassesを含まないユニットで使用可能であることが望まれました。

Typesユニットが導入されました。 Typesユニットにはusesの依存関係がないため、低レベルであっても他のユニットで安全に使用できます。

マスター宣言はTypesに移動され、ClassesClassesからインポートされる既存のコードのためにこれらの型と関数を再エクスポートします。たとえば、SysUtilsTypesを使用しますが、Classesは使用できません。これらの型と関数をTypesのような依存関係のないユニットに移動すると、それが可能になります。

この変更は、Delphiのクロスプラットフォーム開発の始まりであったDelphi 5とDelphi 6の間で行われました。その場合はKylixでしたが、RTLの再構築は、Kylixが放棄されたとしても、将来のクロスプラットフォーム開発に役立ちました。