class abstract
はDelphi for .Net
日からホールドオーバーです。
理由が不明なため、このキーワードの背後には(現在の)実装はありません。
抽象クラスのインスタンス化を防止する場合は、このキーワードは役に立ちません。代わりに、次の操作を行います。
type
TCableSPF = class abstract
//code
strict protected
//Define all constructors for an abstract class as protected.
constructor Create; virtual; reintroduce;
end;
コンストラクタにアクセスすることができ、保護、唯一の子孫オブジェクトとしてすべてのコンストラクタを定義することにより、他のコードは、コンストラクタにアクセスすることはできません。あなたは仮想コンストラクタを再導入するので
は、あなたも使用して、それをインスタンス化することはできません:あなたはコンストラクタoverride
を宣言しないすべき
unit A;
type
TMyAbstractObject = class abstract(TObjectX)
strict protected
constructor Create; virtual; reintroduce;
end;
...
unit B;
TMyClass = class of TObjectX;
AbstractObjectInstance = TMyClass.Create; //Will not work for TMyAbstractObject
注意を。代わりにvirtual reintroduce
を宣言してください(仮想コンストラクタを許可したくない場合はreintroduce
)。
これは既知の問題です:https://quality.embarcadero.com/browse/RSP-10235 –
グーグルでは、{$ WARN CONSTRUCTING_ABSTRACT ERROR} 'オプションを見つけましたが、私は[ RADStudioの東京のドキュメント](http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Classes_and_Objects)(@SebastianProskeのリンクで参照されています)、残念ながら次のようなメモがあります。 "_Delphiでは、下位互換性のために、この機能はもう使用すべきではありません。 : -/ – silvioprog