使用C#重载的VB.NET Not运算符

时间:2014-12-12 18:49:32

标签: c# .net vb.net operator-overloading

我有一个VB类,它会重载Not运算符;这似乎无法从C#应用程序中使用。

Public Shared Operator Not(item As MyClass) As Boolean
    Return False
End Operator

我可以在VB.NET中使用它:

If Not MyClassInstance Then
    ' Do something
End If

我在C#应用程序中尝试使用它,但它不会构建。

if (!MyClassInstance) 
{ 
     // do something
}

我收到错误

  

运营商'!'不能应用于' MyClass'

类型的操作数

有谁能告诉我我错过了什么?

1 个答案:

答案 0 :(得分:15)

VB.NET中的Not运算符是按位运算符,它生成其操作数的一个补码。它没有C#的!运算符,一个逻辑运算符。必须在C#中使用等效的按位运算符来使用VB.NET运算符重载:

if(~MyClassInstance) 
{ 
     // do something
}

您可以在VB.NET中编写一个映射到C#逻辑运算符的函数。这需要看起来像这样:

<System.Runtime.CompilerServices.SpecialName> _
Public Shared Function op_LogicalNot(item As MyClass) As Boolean
    Return False
End Function