免责声明:我对使用泛型还很陌生,所以我不完全确定我正在尝试做的事情是否有意义或可能。
我在一个项目中有一堆用户控件。所有这些用户控件都共享一个相似的属性,所以我想将它移到一个基类中。唯一的区别是属性的返回类型。
在这种情况下,我有三个交互的类。第一个类是基类型,它继承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
andMyReturnTypeClass
不能Friend
被消费者看到/使用。我只是在某处遗漏了一些特殊的关键字,还是这不可能?