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