循環参照

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

循環参照英語:circular reference)とは、ある複数のデータデータ構造)が相互に参照しあっている状態のことである。

概要[編集 | ソースを編集]

2つのデータが相互に参照する相互参照のみならず、何個ものデータが巡り巡って循環しているということも多々ある。 また、1つのデータ構造が同一のデータ構造を参照する自己参照も循環参照のひとつである。

プログラミングを行う際に循環参照を適切に処理できなければ、たとえばシリアライズを行うさいに永久ループに陥り、アウトオブメモリー(メモリ不足)やスタックマシンであればスタックオーバーフローが発生したりといったことになる。

また参照カウンター方式のガベージコレクターを採用するプログラミング言語実行環境では、循環参照により参照しあうオブジェクトは半永久的に参照カウントが減らないという問題に遭遇し、UNIXデーモンWindowsサービス常駐プログラムのような長時間起動し続けるプログラムにおいてメモリー不足やスタックオーバーフローが発生する。

循環参照の例[編集 | ソースを編集]

スプレッドシートでの循環参照[編集 | ソースを編集]

スプレッドシートの代名詞であるExcelで以下のような入力を行うと「循環参照に関する警告」というダイアログが表示され怒られる。

A B
1 =A1 =B2
2 =B1
  • セルA1は自己参照(=循環参照のひとつ)。
  • セルB1はセルB2を参照し、セルB2はセルB1を参照しており、永久に参照を繰り返す。

C#での循環参照[編集 | ソースを編集]

C#ASP.NET MVCKnockout.JSウェブアプリを書いてるわけだが、循環参照するモデルクラス(オブジェクト)をJSON.NETで「簡単」にシリアライズする方法を模索中。いまのところ解決方法が思いつかない。

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]