【发布时间】:2016-09-05 20:57:54
【问题描述】:
设置
我有一堂课,overloaded assignment operator
Public Class Timestamp
ReadOnly _value As String
Public Sub New(value As String)
Me._value = value
End Sub
Public Shared Widening Operator CType(ByVal input As String) As Timestamp
Return New Timestamp(input)
End Operator
End Class
这允许发生以下两种扩大转换:
Dim t1 As Timestamp = "1314"
Dim t2 As Timestamp = CType("1314", Timestamp)
所以它会很高兴地从String 类型更改为Timestamp 类型。
问题
但是,如果我有一个将 Timestamp 作为泛型的方法,则转换不再有效。
例如,对于以下方法:
Private Function GenericCast(Of T)(input As Object, output As T) As T
Return CType(input, T)
End Function
如果我这样称呼它:
Dim t3 as Timestamp
t3 = GenericCast("1314", t3)
我会收到以下错误:
但我们已经知道我绝对可以在这些类型之间进行转换。
为什么它在运行时不适用于泛型?
【问题讨论】:
-
这很奇怪,因为我有一个通用集合类,它做几乎完全相同的事情(CType 一个装箱的值返回到所需的类型)。试图找出差异。这可能是solution (long way around):。
-
这是不可能的,它只适用于接口。
标签: .net vb.net generics operator-overloading