加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

有没有办法在VB.NET中定义隐式转换运算符?

发布时间:2020-12-16 23:59:58 所属栏目:大数据 来源:网络整理
导读:在C#中,您可以使用 implicit关键字来定义隐式用户定义的类型转换运算符。 在VB.NET中,您可以定义一个CType转换运算符,将明确地将用户定义的类型转换为另一种类型。 有没有办法在VB.NET中声明一个隐式转换运算符? 我似乎找不到任何这方面的信息…. 回答
在C#中,您可以使用 implicit关键字来定义隐式用户定义的类型转换运算符。

在VB.NET中,您可以定义一个CType转换运算符,将明确地将用户定义的类型转换为另一种类型。

有没有办法在VB.NET中声明一个隐式转换运算符?

我似乎找不到任何这方面的信息….

回答

我在Widening运算符的MSDN文档中找到了我的答案。显然,CType Widening运算符被“调用”用于隐式转换,而CType Narrowing运算符被称为显式转换。

起初,我认为这个文档是不正确的,因为我在测试过程中遇到异常。我重新测试了一些非常奇怪的东西。当使用“=”运算符完成隐式转换时,我作为扩展转换运算符实现的功能正常工作。

例如,以下内容会将Something类型隐式转换为MyClass。它正确地调用我的扩展转换实现,一切正常工作:

Dim y As Something
Dim x As MyClass = y

但是,如果隐式转换在foreach循环中完成,则它不起作用。

例如,以下代码将抛出异常(“For Each循环中将Something类型隐式转换为MyClass时,无法将类型为”Something“的对象转换为类型”MyClass“):

Dim anArrayOfSomethingTypes() As Something  = getArrayOfSomethings()
 For Each x As MyType In anArrayOfSomethingTypes 
  ....
 Next

对此的任何见解都非常感激。

在VB.NET中,使用扩展CType运算符创建隐式转换:
Class C1
    Public Shared Widening Operator CType(ByVal p1 As C1) As C2

    End Operator
End Class

相反,一个显式的转换,可以通过在上述定义中交换“扩大扩展”来完成。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读