如何覆盖 Class 中 属性 的 .ToString
How to Override the .ToString of a Property in a Class
我确实首先搜索了这个并且有一些类似的帖子,但我找不到我的答案。 :(
假设我有一个 Class:
Public Class ND
Private mNumsDrawn = New List(Of Integer)
Public Sub New(ByVal vNum As Integer)
For i = 1 To vNum
mNumsDrawn.Add(0)
Next
End Sub
Public Property NumsDrawn As List(Of Integer)
Get
Return mNumsDrawn
End Get
Set(ByVal value As List(Of Integer))
mNumsDrawn = value
End Set
End Property
End Class
我想覆盖 属性 NumsDrawn 的 .ToString。
如果我将 .ToString 覆盖放在 class 中,那么它当然会覆盖 class' .ToString。我可以用它来输出列表中的所有数字,但我想更改抽奖中一个数字的输出。
Dim MyDraw = New ND(6)
MsgBox(MyDraw.ToString)
但是我想要的是这样的..
MsgBox(MyDraw.NumsDrawn(1).ToString)
谢谢!
您要求的是覆盖 ND
的 ToString()
方法。尽管这是可能的,但 IMO 并不是很有帮助。
在ND
上定义一个扩展方法会更有帮助。请注意,扩展方法需要放在 Public Module
中(实际上是静态的 class)。
这可以按如下方式完成:
<Extension>
Public Function ToFormattedValue(instance As ND, index As Integer) As String
Return instance.NumsDrawn(index).ToString()
End Function
' Use as:
MessageBox.Show(MyDraw.ToFormattedValue(1))
如果你还想覆盖ToString
方法,代码几乎是一样的。它并没有真正覆盖它只是添加了一个过载。像这样:
Public Class ND
' Other code here
Public Function ToString(index as Integer) As String
Return Me.NumsDrawn(1).ToString
End Function
End Class
我不确定您为什么要自定义 .ToString()
覆盖整数类型...但是...
一个简单的方法是将 NumsDrawn
从 List(Of Integer)
更改为 List(Of NumClass)
,然后覆盖 上的 .ToString
那 class:
Public Class ND
Private mNumsDrawn As List(Of NumClass) = New List(Of NumClass)
Public Sub New(ByVal vNum As Integer)
For i = 1 To vNum
mNumsDrawn.Add(New NumClass(0))
Next
End Sub
Public Property NumsDrawn As List(Of NumClass)
Get
Return mNumsDrawn
End Get
Set(ByVal value As List(Of NumClass))
mNumsDrawn = value
End Set
End Property
End Class
Public Class NumClass
Public Property Value As Integer
Public Sub New(value As Integer)
Me.Value = value
End Sub
Public Overrides Function ToString() As String
Return "Here is my formatted value: " & Me.Value
End Function
End Class
用法:
Dim myND As New ND(99)
Debug.WriteLine(myND.NumsDrawn(6).ToString()) 'outputs:- Here is my formatted value: 0
我确实首先搜索了这个并且有一些类似的帖子,但我找不到我的答案。 :(
假设我有一个 Class:
Public Class ND
Private mNumsDrawn = New List(Of Integer)
Public Sub New(ByVal vNum As Integer)
For i = 1 To vNum
mNumsDrawn.Add(0)
Next
End Sub
Public Property NumsDrawn As List(Of Integer)
Get
Return mNumsDrawn
End Get
Set(ByVal value As List(Of Integer))
mNumsDrawn = value
End Set
End Property
End Class
我想覆盖 属性 NumsDrawn 的 .ToString。
如果我将 .ToString 覆盖放在 class 中,那么它当然会覆盖 class' .ToString。我可以用它来输出列表中的所有数字,但我想更改抽奖中一个数字的输出。
Dim MyDraw = New ND(6)
MsgBox(MyDraw.ToString)
但是我想要的是这样的..
MsgBox(MyDraw.NumsDrawn(1).ToString)
谢谢!
您要求的是覆盖 ND
的 ToString()
方法。尽管这是可能的,但 IMO 并不是很有帮助。
在ND
上定义一个扩展方法会更有帮助。请注意,扩展方法需要放在 Public Module
中(实际上是静态的 class)。
这可以按如下方式完成:
<Extension>
Public Function ToFormattedValue(instance As ND, index As Integer) As String
Return instance.NumsDrawn(index).ToString()
End Function
' Use as:
MessageBox.Show(MyDraw.ToFormattedValue(1))
如果你还想覆盖ToString
方法,代码几乎是一样的。它并没有真正覆盖它只是添加了一个过载。像这样:
Public Class ND
' Other code here
Public Function ToString(index as Integer) As String
Return Me.NumsDrawn(1).ToString
End Function
End Class
我不确定您为什么要自定义 .ToString()
覆盖整数类型...但是...
一个简单的方法是将 NumsDrawn
从 List(Of Integer)
更改为 List(Of NumClass)
,然后覆盖 上的 .ToString
那 class:
Public Class ND
Private mNumsDrawn As List(Of NumClass) = New List(Of NumClass)
Public Sub New(ByVal vNum As Integer)
For i = 1 To vNum
mNumsDrawn.Add(New NumClass(0))
Next
End Sub
Public Property NumsDrawn As List(Of NumClass)
Get
Return mNumsDrawn
End Get
Set(ByVal value As List(Of NumClass))
mNumsDrawn = value
End Set
End Property
End Class
Public Class NumClass
Public Property Value As Integer
Public Sub New(value As Integer)
Me.Value = value
End Sub
Public Overrides Function ToString() As String
Return "Here is my formatted value: " & Me.Value
End Function
End Class
用法:
Dim myND As New ND(99)
Debug.WriteLine(myND.NumsDrawn(6).ToString()) 'outputs:- Here is my formatted value: 0