为什么涉及文字的一些缩小转换不需要CType?

时间:2014-10-20 15:04:13

标签: vb.net

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

0 个答案:

没有答案