Using overloaded VB.NET Not operator from C#

2019-04-26 13:59发布

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?

1条回答
贪生不怕死
2楼-- · 2019-04-26 14:22

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
查看更多
登录 后发表回答