免責事項:私はジェネリックを扱うのはかなり初めてなので、私がやろうとしていることが理にかなっている、または可能であるかどうかは完全にはわかりません.
プロジェクトに多数のユーザー コントロールがあります。これらのユーザー コントロールはすべて同様のプロパティを共有しているため、基本クラスに移動したいと考えています。唯一の違いは、プロパティの戻り値の型です。
このシナリオでは、相互作用する 3 つのクラスがあります。最初のクラスはCompositeControl、プロジェクト内の他のクラスから継承され、継承される基本型です。
Friend Class MyBaseClass(Of T As {New})
Inherits CompositeControl
Private _someProperty As T = Nothing
Protected ReadOnly Property SomeProperty As T
Get
// dumbed down for the sake of example
If _someProperty Is Nothing Then
_someProperty = New T()
End If
Return _someProperty
End Get
End Property
End Class
次に、から継承するこのコントロール クラスがありMyBaseClassます。
Public Class MyControlClass
Inherits MyBaseClass(Of MyReturnTypeClass)
// snip...
End Class
そして最後MyReturnTypeClassに、ベースSomePropertyが返すものは次のとおりです。
Friend Class MyReturnTypeClass
Public Property AutoProperty1 As Boolean = False
Public Property AutoProperty2 As String = String.Empty
// etc
End Class
プロジェクトをビルドしようとすると、次のエラーが発生しますMyControlClass。
一貫性のないアクセシビリティ: 型引数 'MyReturnTypeClass' は、クラス 'MyControlClass' よりもアクセシビリティが低くなります。
他のプロジェクトで消費できるようMyControlClassにする必要があります。また、消費者が見たり使用したりできないようにする必要があります。特別なキーワードがどこかに欠けているだけですか、それとも不可能ですか?PublicMyBaseClassMyReturnTypeClassFriend