プロパティをインターフェイスのインターフェイスコレクションとして宣言し、後でその明示的な型をコンストラクタにインスタンス化したいとします。このようなもの。もちろんプロパティとインターフェイス
Public Class LicenseFile
Implements ILicenseFile
Public Property Collection As IList(Of ILicenseFileDataNode)
Public Sub New()
Collection = New List(Of LicenseFileDataNode) 'here throws an exception.
End Sub
End Class
、LicenseFileDataNodeを実装ILicenseFileDataNode
コンストラクタのユニークなラインのようなものと言って例外起動します。
「タイプ 「System.Collections.Genericのオブジェクトを。リスト
1[NtnAgent.LicenseFileDataNode]' can't be converted to an object of the type 'System.Collections.Generic.IList
1 [NtnAgent.ILicenseFileDataNode] '。
つまり、t彼は「なぜそれがうまくいかなかったのか」という質問をしています。これは単純化されたシナリオですが、ワークラウンドを取るのは簡単ですが、失敗するため理由を理解する必要があります。
ありがとうございます!
+1を参照してください。さらなる研究のために、Googleの共分散とContravariance。 – StriplingWarrior
リストはリストではなくリストで、このリストにEvilAnimalを追加できます。 –
@Saeed: 'List'は同じ理由で 'List 'ではありません。 'EvilAnimal'を' List 'に追加できますが、' List 'には追加できません。 'T - > List 'のマッピングは 'T'で共変しません。 –
jason