简体   繁体   中英

Using overloaded VB.NET Not operator from C#

I have a VB class which overloads the Not operator; this doesn't seem to be usable from C# applications.

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

I can use this in VB.NET:

If Not MyClassInstance Then
    ' Do something
End If

I am trying to us this in a C# application but it won't build.

if (!MyClassInstance) 
{ 
     // do something
}

I get the error

Operator '!' cannot be applied to operand of type 'MyClass'

Can anyone tell me what I am missing?

The Not operator in VB.NET is a bitwise operator, it produces the one's complement of its operand. It doesn't have the equivalent of C#'s ! operator, a logical operator. You must use the equivalent bitwise operator in C# to use your VB.NET operator overload:

if(~MyClassInstance) 
{ 
     // do something
}

You can write a function in VB.NET that will map to the C# logical operator. That needs to look like this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM