如何创建仅适用于支持某些接口的类的通用类?

时间:2019-07-31 06:13:22

标签: vb.net generics

Class cacheable(Of T As haveTimeStampandMainStringKey)
    Public ReadOnly Property Cache As T
    Public ReadOnly Property timestamp As Date

    Public Shared Function create(cache1 As T) As cacheable(Of T)
        Dim a = New cacheable(Of T)
        a._Cache = cache1
        a._timestamp = Now
        Dim key = T.mainkey 'this things fail to compile
        Return a
    End Function
End Class

Interface haveTimeStampandMainStringKey
    ReadOnly Property TimeStamp As DateTime
    ReadOnly Property mainKey As String
End Interface

基本上我希望可缓存的类仅与支持haveTimeStampandMainStringKey的类一起使用

Dim key = T.mainkey产生错误

很明显T支持haveTimeStampandMainStringKey接口。因此,我应该可以访问T.mainkey。我不能为什么?代码有什么问题?

为什么?

1 个答案:

答案 0 :(得分:1)

它不起作用,因为T是一种类型,而不是实例。您需要有一个实例来引用mainKey。您可能需要a.Cache.mainKeycache1.mainKey

(不幸的是,如果您确实想要Shared而不是附加到实例的东西,则没有很好的方法,因为.NET不支持它,除非通过各种基于反射的方法,请参见这些年来,人们对缺少“静态接口”感到很遗憾。