3

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

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 不是首先要做的事情。——布赖恩·胡珀

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

4

0 回答 0