私はFooという名前のクラスを持っています。このクラスにはFooChildBase型の子オブジェクトのコレクションが含まれていますが、FooChildBaseを継承するFooChildTwo型のクラスもあります。オブジェクトと子コレクションの拡張?
Class Foo
Public Children As IList(Of FooChildBase)
End Class
Class FooChildBase
Public Info As String
End Class
Class FooChildTwo
Inherits FooChildBase
Public ExtraInfo As String
End Class
これはすべて正常に動作します。今私は特別な情報を持つ私のFooオブジェクトの特殊化を使用する必要があります。私がやりたい何
Class FooSpecial
Inherits Foo
Public SpecialInfo As String
End Class
Class FooChildSpecial
Inherits FooChildBase
Public SpecialChildInfo As String
End Class
は私のFooSpecialクラスは、それは彼らがFooChildSpecialオブジェクトであるかのように子供のコレクションだが、まだそれにFooChildTwoオブジェクトを追加できるように扱う必要があります。これが可能なのかどうか、どうすればそれができますか?
編集 私の元の質問は間違っていたと思います。 FooChildBaseまたはFooChildTwoかXXXかどうかにかかわらず、Childrenコレクション内のオブジェクトのいずれかを余分な値でラップするには、FooChildSpecialクラスが必要です。
希望はこれが理にかなっています!より明確にする必要がある場合はお知らせください。
ジェームズ
返信いただきありがとうございます。しかし、私はそれを正しく説明したとは思わない。上記の私の編集を参照してください – James
返信いただきありがとうございます。継承よりもむしろこれを使う方法がありますか?おそらくデコレータのようなものでしょうか? – James
ラッパー(デコレータ)パターンを実装した場合、FooChildSpecialはIFooChildオブジェクトをラップできますが、最初にIFooChildオブジェクトを作成してからFooChildSpecialオブジェクトに渡す必要があります。さらに、FooChildSpecialオブジェクトをFooChildTwoに直接キャストすることはできません。代わりに、ラップされた基本オブジェクトにアクセスしてキャストする必要があります。 参照:http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_wrapper302122006080905AM/csharp_wrapper3.aspx?ArticleID=2dc1959d-83a0-4d88-ac5b-70dddc54380c – JustLoren