「自己参照」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator (→記述例) |
imported>Administrator (→記述例) |
||
8行目: | 8行目: | ||
== 記述例 == | == 記述例 == | ||
[[C Sharp|C#]]による自己参照クラスの記述例を示す。 | [[C Sharp|C#]]による自己参照クラスの記述例を示す。 | ||
− | + | この例ではHumanクラスの中において[[フィールド変数]]の[[データ型]]としてHumanクラスを使用している部分が自己参照にあたる。 | |
+ | |||
なお[[C Sharp|C#]]では[[クラス]]の[[インスタンス]]はすべて[[参照]]であるため、たとえば[[C++]]などのように[[参照]]や[[ポインター]]を明示する必要はない。 | なお[[C Sharp|C#]]では[[クラス]]の[[インスタンス]]はすべて[[参照]]であるため、たとえば[[C++]]などのように[[参照]]や[[ポインター]]を明示する必要はない。 | ||
+ | ちなみに[[C Sharp|C#]]ではunsafeキーワードを用いることで[[アンマネージドコード]]にはなるが[[C言語]]や[[C++]]などのように[[ポインター]]を使うこともできる。 | ||
<source lang="csharp"> | <source lang="csharp"> | ||
// 人間クラス | // 人間クラス |
2012年7月6日 (金) 11:39時点における最新版
自己参照(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;
}
関連項目[編集 | ソースを編集]
参考文献[編集 | ソースを編集]