されることがあります。強化を記録タインの代わりに授業?
-
20-08-2019 - |
質問
デ2006年 導入した新しい機能のために記録しなければならな'オブジェクト指向の'.
状況のレコードタイプより適したシリーズをイメージしたデザインクラス。を活用するこれらの記録のか。
解決
あなたは、レコード、オブジェクトおよびクラスを持っています。
ターボパスカル1.彼らは、プロパティとメソッドを持つことができる軽量であるが、彼らは継承をサポートしていないので、レコードが利用できる、レコードを返す機能を持ついくつかの問題があります。これらのレコードは、メソッドを持っている場合、これは時々内部エラーが発生します。
type
TRec = record
function Method1: Integer;
end;
function Func: TRec;
procedure Test;
var
x : TRec;
begin
Func.Method1; // Sometimes crashes the compiler
// Circumvention:
x := Func;
x.Method1; // Works
end;
私は正しいんだ場合は、オブジェクトは、ターボパスカル5で導入されています。そして、彼らはパスカルとOOのための方法を提供します。これらは、多かれ少なかれデルファイの導入により廃止されていますが、まだそれらを使用することができます。オブジェクトはインターフェイスを実装することができます。
クラスはデルファイ1と最も汎用性で導入されています。彼らは、インタフェースおよびサポートの継承を実装します。しかし、それぞれのクラス変数は隠されたポインタです。これは、クラスがヒープ上に作成する必要があることを意味します。幸いなことに、このプロセスはほとんど隠されています。
次の3つの間の違いを持つテーブルです。私は完了するためのインタフェースを追加します。
|Class|Object|Record|Interface|
------------------|-----------------------------|
Are pointers? | y | n | n | y |
Inheritance | y | y | n | y |
Helpers | y | n | y | n |
Impl. Interface | y | y | n | - |
Visibility | y | y | n | n |
Method | y | y | y | y |
Fields | y | y | y | n |
Properties | y | y | y | y |
Consts | y | y | y | n |
Types | y | y | y | n |
Variants | n | n | y | n |
Virtual | y | n | y | - |
------------------|-----------------------------|
他のヒント
と思う機能もご用意Delphi8 2005年.
本ガイドラインま疑問です。
を予めご了承下さの違い:Classオブジェクトは常に使用を通じて、基準の作成を呼び出すことによってコンストラクタです。
のメモリ管理と分配のための記録と同様の基本型(ie数の整数倍).それに渡される方法による価値の場合はvarが使用されます。ものだと思うので無料で記録とその理由について、支援オペレーターの過負荷.が相続または仮想の方法等の記録を更新できるコンストラクタでの使用はオプションです。
コースの主な学問分野のための基準を記録:
時を扱う構造体からのWin32API
の種類なアイデンティティ(な課題とコピー)
時のインスタンスな大きすぎ(複製大きな記録になりが英文を書くとき順序が逆にな
構築時の価値の種類は、行動には真似の数値です。例DateTime、複素数、ベクター。そしてオペレーターの過負荷が素敵な、ものを作成するのではありませんの決定要因です。
効率的なoverdoす:
- 小型に入れますので配列できます。.
最後に、使用するためのルールクラスまたは記録さん本当に形を変え、以前のバージョンのご利用いただけます:standardとexpress。
は、他の回答(演算子のオーバーロード、軽量値型)に加えて、それはあなたの列挙子レコードの代わりにクラスを作成することをお勧めします。それらはスタックに割り当てられているので、またの必要性を除去し、それらを構築し、破壊する必要は、ありませんブロックtry..finally隠されたそのクラス型の列挙子の周りのコンパイラの場所ます。
http://hallvards.blogspot.com/を参照してください。詳細は、2007/10 /もっと楽しい-と-enumerators.htmlするます。
あなたはオペレータは(暗黙的な変換のような)のオーバーロードを使用することができます。このあなたもオブジェクト上のDelphi 2007+または2006.NET上で行うが、唯一2006 Win32でこれらのレコードにすることができます。