english fool
english fool

Reputation: 105

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?

Upvotes: 7

Views: 307

Answers (1)

Hans Passant
Hans Passant

Reputation: 941545

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

Upvotes: 15

Related Questions