免責事項:私はジェネリックを扱うのはかなり初めてなので、私がやろうとしていることが理にかなっている、または可能であるかどうかは完全にはわかりません.
プロジェクトに多数のユーザー コントロールがあります。これらのユーザー コントロールはすべて同様のプロパティを共有しているため、基本クラスに移動したいと考えています。唯一の違いは、プロパティの戻り値の型です。
このシナリオでは、相互作用する 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
にする必要があります。また、消費者が見たり使用したりできないようにする必要があります。特別なキーワードがどこかに欠けているだけですか、それとも不可能ですか?Public
MyBaseClass
MyReturnTypeClass
Friend