Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 581
english fool Avatar asked Dec 12 '14 18:12

english fool


1 Answers

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
like image 136
Hans Passant Avatar answered Sep 19 '22 07:09

Hans Passant