Ognacの雑感

木漏れ日々

目次

Blog 利用状況

書庫

ギャラリ

循環参照はコンパイルでチェックしてくれない

二つのクラスが相互にインスタンス化する以下のソースは、コンパイルOKなので実行できます。Stack Overで落ちますが。

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim c As New a
    End Sub
End Class
Public Class a
    Public bb As b
    Public Sub New()
        bb = New b
    End Sub
End Class
Public Class b
    Public aa As a
    Public Sub New()
        aa = New a
    End Sub
End Class

循環参照は、文法としてはOKなんでしょうが、コンパイルチェックでエラーにしてくれても良い気がします。
こんなコーディングするほうが悪いんですが、デバッグし難い不具合でした。

投稿日時 : 2007年2月16日 18:41

Feedback

# re: 循環参照はコンパイルでチェックしてくれない 2007/02/16 20:31 囚人

コンパイルエラーにしてしまったら、再帰呼び出しとかできなくなりそうですね。

# re: 循環参照はコンパイルでチェックしてくれない 2007/02/16 21:54 なちゃ

エラーにする条件が難しいでしょう。
Newを使った時点でだめ?
なんらかの条件でNewしてる場合は?
など考え出すと難しいと思います。

再起呼び出しの条がを間違っているのを
文法レベルでエラーにするのは難しいでしょう
という話ですね。

# re: 循環参照はコンパイルでチェックしてくれない 2007/02/17 0:15 Ognac

そうですね。エントリーポイントが違う再帰呼び出しもあり得る訳だし。
再帰の形式は相互参照の形式ですものね。ダメですね。

タイトル
名前
Url
コメント