re: Re:頭を柔らかく(「Re:頭を柔らかく」へのコメント)より:
>インスタンスの参照が循環するのと、
>クラスの参照が循環するのと、
「クラスの参照」の意味がわかりませんT-T
参照するのは全部インスタンスで…
ですよね(T^T)
本文の方に「Parent プロパティ」は Control クラスに定義されていて、これは自己参照です。設計図の循環参照ではありません。
と書いていることを指しています。
Form 上に Button を置きます。Form.Controls プロパティ内には、配置した Button のインスタンスがあります。そのインスタンスの Parent プロパティは、配置されている Form のインスタンスを指しています。
「インスタンスの参照が巡回する」とは、この状態を指しています。これを否定するつもりは、毛頭ありません。
で、「クラスの参照」について。
Form.Parent プロパティを見てみます。MSDN Library では、ここ→Form メンバ (System.Windows.Forms)(MSDN ライブラリ)
メンバの一覧ですが、ここの Parent プロパティには、(Control から継承されます。)
と、書かれています。そして、このプロパティの型は Control クラスです。
Button.Parent も同じ。Control クラスから継承した、Control 型の Parent プロパティです。
つまり、Form クラスが Button クラスを知っていたり、Button クラスが Form クラスを知っていたりするわけではありません。Form クラスと Button クラスは互いを知らず、ただ、両方の継承元である Control クラスを知っているだけです。また、Control クラスは Form クラスも Button クラスも知っていません。Control クラスが、ControlCollection クラスを通して Control クラスを知っています。
このとき、クラスの定義上は、継承先クラスから継承元クラスへの一方的な片思いという関係しかありません。この状態を「クラスの参照が循環していない」とします。(いや、Control <-> ControlCollection で循環しているわけだけど)
えムナウさんが書かれていますが、System.Data.DataTable クラスは、DataSet プロパティに DataSet 型の自分が所属する DataSet を持っています。では、DataSet クラスは?
DataSet は自分に所属している DataTable を、DataTables プロパティによって知ることができます。そしてこのプロパティは、DataTableCollection 型です(「クラス」と「型」の使い分けについては気にするナ)。よって、DataSet → DataTableCollection → DataTable → DataSet と、参照しています。この状態を「クラスの参照が循環している」とします。
これで、使い分けの説明になったかな?
投稿日時 : 2007年10月19日 22:14