所以,我写了这段代码,它给了我一个错误。 (构造函数调用仅作为实例构造函数中的第一个语句有效。)
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)
时进行编译。