我(显然不正确)假设Cstr(something)相当于something.ToString.
我希望得到一个枚举类型作为字符串,它似乎取决于我使用的转换方法我得到enum的名称或名称的索引:
Public Enum vehicleType
Car
Lorry
Bicycle
End Enum
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("Index is " & _
CStr(vehicleType.Car) & _
".Name is " & _
vehicleType.Car.ToString)
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
为什么这些转换为字符串返回该enum类型的不同元素?
该ToString方法是返回a的标准公共方法String.它是一种由基Object类型定义为可重写的方法.因此,每个类都可以覆盖该方法以返回它想要的任何内容.类重写该ToString方法以使其返回对象的良好的人类可读描述是很常见的.
CStr另一方面,是铸造操作员.这是简写CType(x, String).像许多其他运算符一样,转换运算符可以被任何类重写.但是,通常情况下,您希望转换操作返回原始对象的实际值的最接近表示,而不是描述性字符串.
因此,您可能希望ToString返回不同的结果,这并不罕见CStr.在枚举的情况下,每个成员本质上是一个整数,因此CStr在枚举成员上的工作方式与CStr整数相同.这就是你所期望的.但是,ToString已经重写了返回更可人性化的值的版本.这也是你所期望的.
下面是一个会覆盖一个类的实例CStr和ToString:
Public Class MyClass
Public Overrides Function ToString()
Return "Result from ToString"
End Function
Public Shared Widening Operator CType(ByVal p1 As MyClass) As String
Return "Result from cast to String"
End Operator
End Class
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |