如何重载BasicType.ToString()

时间:2015-08-06 14:15:56

标签: vb.net overloading tostring

我想重载一个ToString()的{​​{1}}方法,但仅限于某个类(即当我在Integer类中调用Integer.ToString时,它会使用我的重载,当我在Foo类之外调用它时,它使用标准方法)

首先,这可能吗?

其次我想要重载这个的原因是我可以让它在整数的每个字节的十六进制值的字符串中进行一些非常格式化,例如如果我的整数是Foo那么&HA55A将返回一个字符串= MyInteger.ToString(Little-endian)。超载的方式是什么?或覆盖,或扩展?

第三,我尝试重载如下,但同一类中的调用似乎仍然使用正常"5A A5",这意味着它会导致“42330”。

ToString()

我几乎是VB.Net的新手,所以我仍然在努力实现我想要的最佳方式。

1 个答案:

答案 0 :(得分:2)

我会添加一个扩展方法。类似的东西:

Module IntegerExtensions
    <Extension()> 
    Public Function ToHex(ByVal i As Integer) As String
        Return Microsoft.VisualBasic.Conversion.Hex( i )
    End Function 
End Module

然后在任何您想要十六进制值的地方调用ToHex。

你无法真正改变整数的ToString,即使你能做到这一点也不是一个好主意 - 这会让人感到困惑。最好有两个单独的方法,当你想要一个十六进制字符串时使用ToHex,当你想要常规字符串时使用ToString。它还使代码更具可读性。当您看到ToHex或ToHexadecimalString或ToHexString时,您将知道代码正在做什么。即使你在有人看到ToString时确实让它工作了,对他们来说也不会明白他们会得到一个十六进制的字符串。