none
コンストラクタでMe.New(引数)使用時の条件について RRS feed

  • 質問

  • 初歩的な質問で恐縮なのですが、

    ①、②がよくて③がエラーになる理由が知りたいです。

    Public Class Class1

      Public Sub New() Me.New("---", "---", 0)    ’① End Sub Public Sub New(cd As String, nm As String)    ’② Me.New(cd, nm, 0) End Sub Public Sub New(cd As String, nm As String, ag As String)    ’③ Me.New(cd, nm, ag) End Sub

    End Class

    2020年11月11日 13:00

回答

  • 1のMe.Newは引数が3個なので3のコンストラクタを実行します。
    2のMe.Newは引数が3個なので3のコンストラクタを実行します。
    3のMe.Newは引数が3個なので3のコンストラクタを実行し、さらに3のコンストラクタを実行しという繰り返しになって終わらなくなってしまいます。

    詳しくはエラーメッセージBC30298を参照。

    ちなみに以下のようにして3から2を呼ぶようにしても、また3が呼び出されることを検出して同じエラーになります。

    Public Class Class1
        Public Sub New()
            Me.New("---", "---", 0)    '①
        End Sub
    
        Public Sub New(cd As String, nm As String)    '②
            Me.New(cd, nm, 0)
        End Sub
    
        Public Sub New(cd As String, nm As String, ag As Integer)    '③
            Me.New(cd, nm)
        End Sub
    End Class


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク hisai 2020年11月12日 5:14
    2020年11月11日 21:21

すべての返信

  • 1のMe.Newは引数が3個なので3のコンストラクタを実行します。
    2のMe.Newは引数が3個なので3のコンストラクタを実行します。
    3のMe.Newは引数が3個なので3のコンストラクタを実行し、さらに3のコンストラクタを実行しという繰り返しになって終わらなくなってしまいます。

    詳しくはエラーメッセージBC30298を参照。

    ちなみに以下のようにして3から2を呼ぶようにしても、また3が呼び出されることを検出して同じエラーになります。

    Public Class Class1
        Public Sub New()
            Me.New("---", "---", 0)    '①
        End Sub
    
        Public Sub New(cd As String, nm As String)    '②
            Me.New(cd, nm, 0)
        End Sub
    
        Public Sub New(cd As String, nm As String, ag As Integer)    '③
            Me.New(cd, nm)
        End Sub
    End Class


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答としてマーク hisai 2020年11月12日 5:14
    2020年11月11日 21:21
  • gekkaさん

    ご回答ありがとうございます。

    3のコンストラクタだと、ずっと3のコンストラクタを参照し続けるので無限ループになってしまいエラーになるという事ですね。

    理解できました、ありがとうございました!!

    2020年11月12日 5:22