☆ネストしたクラス

Nick Hodges氏のブログで、「ネストしたクラスが使えるって知ってた?」という記事がありますね。 これのメリットって、クラス間の関係がはっきりするってことぐらいなんでしょうか。

確かに、細項目(TItem)、いくつかの細項目が集まった項目(TItems)とそれを管理するリスト(ITtemList)を 作ったときにきちんと注釈を入れておかないと、あとでどのような関係になっているのかわからなくなりますけどね。

ネストしないクラスの場合
type

  TItem1 = class(TObject);
  TItem2 = class(TObject);
  TItem3 = class(TObject);

  TItems = class
  private
    FItem1: TItem1;
    FItem2: TItem2;
    FItem3: TItem3;
  public
    constructor Create;
    destructor Destroy; override;
  end;

  TItemList = class
  private
    FList: TList;
  public
    constructor Create;
    destructor Destroy; override;
  end;

ネストしたクラスの場合
type

  TItemList = class
  private
    type
      TItems = class
      private
        type
          TItem1 = class(TObject);
          TItem2 = class(TObject);
          TItem3 = class(TObject);
      private
        FItem1: TItem1;
        FItem2: TItem2;
        FItem3: TItem3;
      public
        constructor Create;
        destructor Destroy; override;
      end;
    private
      FList: TList;
  public
    constructor Create;
    destructor Destroy; override;
  end;
関係はわかりやすいけど、見た目ややこしくない?
今までのクラスを書き直すほど、魅力はないかな。


Nick Hodges
Did you know….
http://blogs.codegear.com/nickhodges/2007/10/03/38952

[参考]
CodeGear
Delphi 7以降の言語およびコンパイラの新機能
http://dn.codegear.com/jp/article/34409

|

その他のカテゴリー

ADO | ADT | API | ArrayList | ASP.NET | BDE | BDP.NET | BdpConnection | Borland Developer Studio 2006 | CAPICOM | class | ClipBoard | CodeEditor | Convert.ToString | Custom component | DBExpress | Delphi 2005 | Delphi 2006 | Delphi 2007 | Delphi XE2 | Delphi7 | Delphi8 | Device Driver | Dialog | Docking | DocuWorks | Docuworks SDK | Drag&Drop | Evernote | EXCEL | Firebird | FireMonkey | Game | General | Generics | Google Earth COM API | Google Maps | Google SketchUp | Graphic | IDE | Imm | Indy | InstallAware Express6 | InterBase Admin | JWW | Microsoft SQL Server | MyBase | OnMouseDown | Oracle XE | Paradox | PreviewHandler | PrintDialog | PrintPreviewDialog | PropertyGrid | PSDファイル | Ribbon Controls | RichTextBox | Servers | SubClass | TAction | TActionList | TAnimate | TButton | TCategoryButtons | TClientDataSet | TComboBox | TComboBoxEx | TCustomEdit | TDBGrid | TDockTabSet | TDrawGrid | TEdit | TExcelApplication | TFont | TForm | third party | TImage | TLabel | TList | TListBox | TListView | TMemo | TOpenDialog | TOutlookApplication | TPageControl | TPanel | TRichEdit | TShellResources | TStringGrid | TTabControl | TToolBar | TToolButton | TTreeView | TWebBrowser | Update | VCL Styles | WinInet | XE2 | XPman | オープン配列パラメータ | グループ化 | トランスレーションマネージャー | ファイル処理 | ファイル名処理 | 動的配列 | 投票 | 文字列処理 | 日本語入力 | 暗号 | | 音声合成利用