5

1つのアプリケーションで使用されるCoreとBusinessの2つのbplパッケージがあります。Core.bplには、TUserクラスを含むユニットUser.pasが含まれています。Core.bplのTUserには、ログインとパスワードの2つの基本フィールドしかありません。ビジネスパッケージのTUserクラスを新しいフィールドUserNameで拡張したいと思います。そして、ビジネスユニットをベースユニットとしてUser.pasと名付けたいと思います。

そこで、Business.bplに新しいユニットUser.pasを作成し、Core.bplからTUserを拡張するTUserクラスを配置します。次に、TUserをCore.bplから、TUserをBusiness.bplから分割する必要があります。そして、ここで「名前空間の力」を使用する必要があります:)

Embarcaderoのドキュメントページを読みました。彼らは、Base.Coreのように、パッケージに名前を付けてデフォルトの名前空間を設定できると言っています。パッケージにBase.Core.bplおよびExtra.Business.bplという名前を付けました。そして、コンパイルされたファイルはそのように名付けられます。ただし、その中のすべてのユニットには、以前と同じ名前が付けられています:User.pas->User.dcu。

これで、モジュールUser.pasに2つのクラスTUserがあります。1つはパッケージBase.Core.bplにあり、もう1つはパッケージExtra.Business.bplにあります。ExtraのUser.pasは次のようになります

unit User;
interface
uses
  Base.User;
type
  TUser = class(Base.User.TUser)
  end;

しかし、それをコンパイルしたいとき、「ユーザーを削除します。ユニットユーザーは必要なパッケージベースで見つかりました。」というウィンドウが表示されます。

たとえば、JavaのようにBase.User.TUserから新しいTUserを継承するにはどうすればよいですか?

PS念のため、DelphiXE2IDEを使用しています。

4

1 に答える 1

6

デフォルトの名前空間はポータルケーキのようです-それは嘘です。リンク先のドキュメントがプログラムと一致しません。

私はこのプログラムを作りました:

MyCompany.Programs.MyProgram.dpr

program MyCompany.Programs.MyProgram;

uses
  MyUnit in 'MyUnit.pas';

begin
end.

MyUnit.pas

unit MyUnit;

interface

implementation

end.

結果の.dcuファイルの名前は.dcuですMyUnit.dcu。リンクしたドキュメントによると、という名前を付ける必要がありますMyCompany.Programs.MyUnit.dcu

ユニット名で名前空間を明示的に指定する必要があると思います。

于 2012-12-22T19:47:12.490 に答える