1

フォームに奇妙な (私の目には) 問題があり、それは基本フォームのコンストラクターです。コンパイルしようとすると Visual Studio からエラーが発生することが予想されますが、すべてが成功し、エラーが発生するのは実行時にフォームが作成されるときだけです。

次のコンストラクターを持つ基本フォームがあります。

Public Sub New()

    'SNIP

End Sub

Public Sub New(ByVal businessObjectID As Integer)

    'SNIP

End Sub

Public Sub New(ByVal viewModel As BaseModel, ByVal childForm As Boolean)

    'SNIP

End Sub

Public Sub New(ByVal unitOfWork As IUnitOfWork)

    'SNIP

End Sub

上記の基本フォームから継承するフォームがあり、そのコンストラクターは次のとおりです。

Public Sub New(ByVal viewModel As BaseModel, ByVal parentTaskModel As TaskModel)
     MyBase.New(viewModel)

     InitializeComponent()

     'SNIP

End Sub

問題は、派生フォームが作成されるときに、型 BaseModel を IUnitOfWork にキャストできないというエラーが表示されることです。今、私はこれを完全に理解しており、期待されています。MyBase.New(viewModel)ただし、タイプが一致しないため、コードに行を書き込むときに Visual Studio がエラーを返すと予想していました。

たとえば、私が書くMyBase.New(string.Empty)と、String から Int への変換に関するエラーが発生しますが、これも理解できます。ただし、そのコード行に任意の参照型を入れることができ、問題なくコンパイルされます。

なぜこれが起こっているのか、あるいはなぜ私の脳が愚かなのか、誰か説明できますか!

4

1 に答える 1

2

ファイルの先頭で使用する必要があります

Option Strict On

次に、暗黙的な変換のエラーが発生します。

http://support.microsoft.com/kb/311329/en-us

Option Strict ステートメント デフォルトでは、Visual Basic .NET または Visual Basic コンパイラは厳密なデータ型指定を強制しません。このデフォルトの動作を変更するには、デフォルトのプロジェクト値の変更セクションを参照してください。

于 2013-10-10T12:00:54.870 に答える