Double类型缩小到示例,这是一个类。我不希望它包含一些Double值。 NaN是我不想要的价值的一个例子。编译器不会抱怨TestMe中的文字作业。为什么不?它确实给出了" Option Strict On禁止来自' Double'的隐含转换。以'为例'"如果使用变量键入Double,则会出错,但不会使用常量或文字。
Option Strict On
Public Class example
Private d As Double
Public Shared Sub TestMe()
Dim x As example
x = Double.NaN
End Sub
Public Sub New(d As Double)
If Double.IsNaN(d) Then
Throw New ArgumentOutOfRangeException()
End If
Me.d = d
End Sub
Public Shared Narrowing Operator CType(value As Double) As example
Return New example(value)
End Operator
End Class
请注意,这只是一个简单的例子来说明我对编译器行为的好奇心。
This C# question问了类似的事情,虽然编译器的行为相当简单,但这个例子并不涉及运算符重载。然后,VB编译器不允许以下任何一个文字赋值,那么为什么它应该允许我的示例中的那个呢?
Dim i As Integer
i = 4.0#
i = UInt32.MaxValue