自己参照

提供: MonoBook
ナビゲーションに移動 検索に移動

自己参照(self reference)とは、循環参照のひとつで、あるデータ構造において、その中に含まれるデータが同一のデータ構造への参照もしくはポインターとなっている物のことである。

概要

自己参照は主として、ツリー構造や、リスト構造のひとつである連結リストなどを表す際に多用される。

自己参照を持つデータ構造を表すのに、構造体を用いる物は自己参照構造体クラスを用いる物は自己参照クラスなどと呼ばれる。この2つには構造体化クラスかというくらいしか違いはないが、主要なアルゴリズムで使われるデータ構造の多くは、構造体が全盛の時代にほぼ出尽くした感があり、現在でも自己参照と言えば「自己参照構造体」というくらい用語としての強弱がはっきりしているという傾向がある。

記述例

C#による自己参照クラスの記述例を示す。 この例ではHumanクラスの中においてフィールド変数データ型としてHumanクラスを使用している部分が自己参照にあたる。

なおC#ではクラスインスタンスはすべて参照であるため、たとえばC++などのように参照ポインターを明示する必要はない。 ちなみにC#ではunsafeキーワードを用いることでアンマネージドコードにはなるがC言語C++などのようにポインターを使うこともできる。

// 人間クラス
class Human
{
    public string Name;
    public DateTime Birth;
    
    // 父親
    // 自己参照
    public Human Father;

    // 母親
    // 自己参照
    public Human Mother;
}

関連項目

参考文献


外部リンク