だから、私はこのコードを書いて、それは私にエラーを与えます. (コンストラクター呼び出しは、インスタンス コンストラクターの最初のステートメントとしてのみ有効です。)
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
コードの 2 番目のブロックがコンパイルされるのに、最初のブロックがコンパイルされない理由を誰か教えてください。
また、コンストラクター呼び出しが最初のステートメントでなければならないのはなぜですか? ありがとう。
編集 :
Match クラスには、データ メンバーとしてクラスがありますか? そうでないなら、それが原因だと思います。PossibleMove の最初のコンストラクターは一致オブジェクトを構築する必要があるため、Me.New は最初に行われるわけではありません。– ブライアン・フーパー
マッチ クラスには「ユーザー定義オブジェクト」タイプのデータ メンバーがないため、おそらくあなたの推測は正しいでしょう。しかし、その場合は、それを削除してもコードはコンパイルされませんWith _PossibleMove
。なぜなら、その場合でも、一致オブジェクトが構築されているためMe.New()
、最初に行われるわけではないからです。With _PossibleMove
そして、そうではありません(つまり、を削除してに変更するとコンパイルされMe.New(_PossibleMove.x1, _PossibleMove.y1, _PossibleMove.x2, _PossibleMove.y2, _PossibleMove.match)
ます。