我试图访问作为参数传递给类型参数化过程的类的共享属性。 原因为什么我这样做是因为我可以将各种API调用端点(以及其他特定于类的事物)嵌入到类本身中的属性中。我读过一些类似的SO帖子,但没有什么能够确定它是不可能的(我认为很可能)。
以下是结构的本质 - 最后有一些伪代码:
MustInherit Class BaseClass
Shared Property Endpoint As String
End Class
Class Person
Inherits BaseClass
Property Age As Integer
Property Name As String
Sub New()
_Endpoint = "/GetPerson"
End Sub
End Class
Class Event
Inherits BaseClass
Property When As Date
Property Type As String
Sub New()
_Endpoint = "/GetEvent"
End Sub
End Class
Function Retrieve(T As BaseClass)(Id As String) As T
Dim oResp As HttpResponse = MakeGetCall(T.Endpoint, Id) <- T.Endpoint throws a compile error
Return Deserialize(Of T)(oResp.Content)
End Function
Dim oPerson As Person = Retrieve(Of Person)("123")
Dim oEvent As Event = Retrieve(Of Event)("123")
对于我的小脑子,我会想到,因为T
的基类是BaseClass
,其中包含属性Endpoint
,我会没事的。但似乎没有。
我已经在SO和其他地方尝试了很多东西来克服这个问题无济于事。是的,我意识到我可以根据T
的类型执行某种端点查找,但上面代表了一个非常干净的解决方案,如果可能的话我想让它工作。
有什么想法吗?
答案 0 :(得分:0)
假设您希望每个子类的EndPoint
不同,则应使用MustOverride
代替Shared
...
MustInherit Class BaseClass
Public MustOverride Property EndPoint As String
End Class
然后在每个子类中返回一个常量
Class Person
Inherits BaseClass
Public Overrides Property EndPoint As String
Get
Return "/Person"
End Get
您可能也想将EndPoint
声明为ReadOnly
。
小的限制是你需要一个类的实例才能访问EndPoint
(因为它不是Shared
)。如果您有无参数构造函数,则可以在需要时使用(New Person).EndPoint
。