「循環参照」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
imported>Administrator
1行目: 1行目:
循環参照(英:circular reference)とは、ある複数の[[データ]]が相互に参照しあっている状態のことである。
+
'''循環参照'''(英:circular reference)とは、ある複数の[[データ]]([[データ構造]])が相互に[[参照]]しあっている状態のことである。
  
2つの[[データ]]が相互に参照するのみならず、何個ものデータが巡り巡って循環しているということも多々ある。
+
2つの[[データ]]が相互に参照する[[相互参照]]のみならず、何個ものデータが巡り巡って循環しているということも多々ある。
 
+
また、1つのデータ構造が同一のデータ構造を参照する[[自己参照]]も循環参照のひとつである。
また、[[自己参照]]も循環参照のひとつである。
 
  
 
== 概要 ==
 
== 概要 ==

2012年7月6日 (金) 11:22時点における版

循環参照(英: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で「簡単」にシリアライズする方法を模索中。いまのところ解決方法が思いつかない。

関連項目

参考文献


外部リンク