2014-12-12 9 views
7

Ho una classe VB che sovraccarica l'operatore Not; questo non sembra essere utilizzabile dalle applicazioni C#.Utilizzo di VB.NET sovraccarico Operatore non di C#

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

posso usare questo in VB.NET:

If Not MyClassInstance Then 
    ' Do something 
End If 

Sto cercando di noi questo in un'applicazione C#, ma non costruirò.

if (!MyClassInstance) 
{ 
    // do something 
} 

ottengo l'errore

Operatore '!' non può essere applicato all'operando di tipo "MyClass"

Qualcuno può dirmi cosa mi manca?

+0

provare a scrivere il nome della classe con parentesi di parametri perché è necessario chiamare quella funzione che restituisce un valore booleano. ie { // fare qualcosa // // – sohaiby

risposta

15

Il Not operatore in VB.NET è un bit a bit operatore, che produce il complemento a uno del suo operando. Non ha l'equivalente dell'operatore ! di C#, un operatore logico. È necessario utilizzare l'operatore bit a bit equivalente in C# per usare il tuo overload dell'operatore VB.NET:

if(~MyClassInstance) 
{ 
    // do something 
} 

è possibile scrivere una funzione in VB.NET che mapperà al C# operatore logico. Deve avere un aspetto simile al seguente:

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

Grazie per la spiegazione, purtroppo se uso l'op_LogicalNot non mi è permesso usare anche l'operatore VB Not, quindi posso averlo strano in VB o strano in C#. Mi limito ad usare l'operatore bit a bit in C#. –

+1

Affascinante, lo studio di Visual lamenta che un metodo con lo stesso nome è dichiarato due volte, ma lo fa ed esegue. Cheers. –