构造函数调用仅作为实例构造函数中的第一个语句有效吗?

时间:2013-07-18 06:53:18

标签: vb.net constructor

所以,我写了这段代码,它给了我一个错误。 (构造函数调用仅作为实例构造函数中的第一个语句有效。)

Public Class PossibleMove
    Public importance As Integer
    Public x1,y1,x2,y2 As Integer
    Public match As Match

    Public Sub New(ByVal _PossibleMove As PossibleMove)
        With _PossibleMove
            Me.New(.x1, .y1, .x2, .y2, .match)  'Gives an error
        End With
    End Sub

    Public Sub New(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer, ByVal _Match As Match)
        Me.importance = 0
        '  ...
    End Sub
End Class

如果我删除了With _PossibleMove,它会按预期工作,因此,这不是什么大问题。 问题是,我没有得到以下代码的错误,即使它必然是相同的事情(??)

Public Class Match

    ' Data members...

    Public Sub New(ByVal _Match As Match)
        With _Match
            Me.New(.xBegin, .xEnd, .yBegin, .yEnd, .triggerX, .triggerY, .color)
            '  No error here!  ^^^
        End With
    End Sub

    Public Sub New(_xBegin As Integer, _xEnd As Integer, _yBegin As Integer, _yEnd As Integer, _triggerX As Integer, _triggerY As Integer, _Color As Integer)
        Me.xBegin = _xBegin
        ''' More stuff here...
    End Sub
End Class

有人可以告诉我为什么第二个代码块会编译但第一个代码块没有编译。

另外,为什么构造函数调用必须是第一个语句? 感谢。

编辑:

  

Match类是否有任何类作为数据成员?如果没有,我猜这就是原因。 PossibleMove中的第一个构造函数必须构造匹配对象,因此你的Me.New不是第一件事。 - Brian Hooper

嗯,Match Class没有任何“用户定义对象”类型的数据成员,所以也许你的猜测是正确的。 但是如果是这样的话,即使我删除了With _PossibleMove的东西,代码也不会编译,因为即使这样,匹配对象正在被构造,所以,Me.New()不是第一件事完成。 情况并非如此(意味着它会在删除With _PossibleMove并将其更改为Me.New(_PossibleMove.x1, _PossibleMove.y1, _PossibleMove.x2, _PossibleMove.y2, _PossibleMove.match)时进行编译。

0 个答案:

没有答案