【问题标题】:How to convert an Integer automatically to my type?如何将整数自动转换为我的类型?
【发布时间】:2014-09-26 10:23:02
【问题描述】:

我想做的是:

class myNumber
    sub new(i as integer)
    end sub
end class

sub main()
    Dim listl as new List(of myNumber)
     listl.add(1)
     ' some more stuff ... '
end sub

所以问题是我必须重写什么样的函数,或者我需要添加什么属性,以便 main 中的代码编译?

这不是出于任何特定目的,只是出于好奇。

【问题讨论】:

  • 不应该只是listl.add(new myNumber(1))吗?
  • 这将是一种方式,但我有兴趣简单地使用 listl.add(1) ,然后程序会自动调用构造函数以获取整数
  • 你创建了一个List(Of myNumber),它只存在于那个sub中,顺便说一下,所以要添加到列表中,你需要创建新的MyNumbers。它包含MyNumber 类型而不是整数
  • 对不起,我的意思是 myNumber 自动调用只有一个 Integer 作为参数的构造函数 类似于这里的示例:msdn.microsoft.com/de-de/library/… where they use "Dim posBigInt as BigInteger = 0" 这应该是相同的原理还是不行?

标签: vb.net type-conversion


【解决方案1】:

您需要提供从System.Int32MyNumberimplicit conversion。在这种情况下,我也会使用 Structure 而不是类,因为它表示不可变的值类型。

在 VB.NET 中,您必须重写 Widening CType operator 才能创建隐式转换:

Public Structure MyNumber

    Public Sub New(value As Int32)
        Me.Value = value
    End Sub

    Public Property Value As System.Int32

    Public Overloads Shared Widening Operator CType(value As Int32) As MyNumber
        Return New MyNumber(value)
    End Operator

End Structure

现在可以了:

Dim listl as new List(of MyNumber)
listl.Add(1)

【讨论】:

    【解决方案2】:

    您只需稍微更改您的Add 即可创建myNumber 的新实例,并在构造函数中传入所需的整数值:

    Class myNumber
        Sub New(i As Integer)
    
        End Sub
    End Class
    
    Sub Main()
        Dim listl As New List(Of myNumber)
        listl.Add(New myNumber(1))
        'some more stuff
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多