gpt4 book ai didi

.net - 有没有一种方法可以在VB.NET中定义隐式转换运算符?

转载 作者:行者123 更新时间:2023-12-03 10:15:00 24 4
gpt4 key购买 nike

在C#中,可以使用implicit关键字定义隐式的用户定义类型转换运算符。
在VB.NET中,您可以定义CType转换运算符,该运算符会将用户定义的类型显式转换为另一种类型。
有没有办法在VB.NET中声明隐式转换运算符?
我似乎找不到任何信息。

回答
我在MSDN文档中找到了 Widening 运算符的答案。显然,对于隐式转换,“调用” CType Widening运算符,而对于显式转换,则调用“CType Narrowing ”运算符。
起初,我认为该文档不正确,因为我在测试过程中遇到了异常。我重新测试,发现很奇怪。当使用“=”运算符进行隐式转换时,我实现为加宽转换运算符的功能可以正常工作。
例如,以下内容将隐式将Something类型转换为MyClass。它正确地调用了Widening转换实现,并且一切正常,没有错误:

Dim y As Something
Dim x As MyClass = y
但是,如果隐式转换是在 foreach循环中完成的,则它将不起作用。
例如,当将 Something类型隐式转换为 MyClass循环中的 For Each时,以下代码将引发异常(“无法将类型为'Something'的对象转换为类型'MyClass'”):
 Dim anArrayOfSomethingTypes() As Something  = getArrayOfSomethings()
For Each x As MyType In anArrayOfSomethingTypes
....
Next
非常感谢对此有任何见识。

最佳答案

在VB.NET中,使用Widening CType运算符创建隐式转换:

Class C1
Public Shared Widening Operator CType(ByVal p1 As C1) As C2

End Operator
End Class

相反,可以通过在上面的定义中将 Narrowing交换为 Widening来完成显式转换。

关于.net - 有没有一种方法可以在VB.NET中定义隐式转换运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1312549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com