在C#中,您可以使用implicit关键字来定义隐式用户定义的类型转换运算符。
在VB.NET中,您可以定义一个CType转换运算符,它将用户定义的类型显式转换为另一种类型。
有没有办法在VB.NET中声明隐式转换运算符?
我似乎无法找到关于此的任何信息......
我在Widening
运算符的MSDN文档中找到了答案。显然,CType Widening
运算符被“调用”用于隐式转换,而CType Narrowing
运算符被调用用于显式转换。
起初,我认为这个文档不正确,因为我在测试期间遇到了异常。我重新测试并发现一些非常奇怪的东西。当使用“=”运算符完成隐式转换时,我实现为扩展转换运算符的函数工作正常。
例如,以下内容将隐式地将Something
类型转换为MyClass
。它会正确调用我的Widening
转换实现,所有内容都可以正常运行:
Dim y As Something
Dim x As MyClass = y
但是,如果隐式强制转换是在foreach
循环中完成的,则它不起作用。
例如,当Something
类型被隐式转换为以下代码时,以下代码将引发异常(“无法将类型为'Something'的对象转换为'MyClass'”) MyClass
循环中的For Each
:
Dim anArrayOfSomethingTypes() As Something = getArrayOfSomethings()
For Each x As MyType In anArrayOfSomethingTypes
....
Next
非常感谢对此的任何见解。
答案 0 :(得分:31)
在VB.NET中,使用Widening CType运算符创建隐式转换:
Class C1
Public Shared Widening Operator CType(ByVal p1 As C1) As C2
End Operator
End Class
相反,显式转换可以通过在上述定义中交换Narrowing
Widening
来完成。