2014-12-12 10 views
7

Mam klasy VB, która przeciąża operatora Not; to nie wydaje się być użyteczne z aplikacji C#.Korzystanie przeciążone VB.NET Not operator z C#

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

mogę to wykorzystać w VB.NET:

If Not MyClassInstance Then 
    ' Do something 
End If 

Próbuję nas tego w aplikacji C#, ale nie będzie budować.

if (!MyClassInstance) 
{ 
    // do something 
} 

pojawia się błąd

operatora '!' nie może być zastosowany do operandu typu "MyClass"

Czy ktoś może mi powiedzieć, czego mi brakuje?

+0

spróbuj wpisać nazwę klasy z nawiasami klamrowymi, ponieważ musisz wywołać tę funkcję, która zwraca wartość logiczną. tj. 'if (! MyClassInstance()) // zrobić coś } coś zrobić }' – sohaiby

Odpowiedz

15

Operator Not w VB.NET jest operatorem bitowym bitowy, produkuje własne uzupełnienie swojego operandu. Nie ma odpowiednika operatora C# '!, operatora logicznego. należy użyć równoważną operatory bitowe w C# używać VB.NET przeciążenie operatora:

if(~MyClassInstance) 
{ 
    // do something 
} 

Można napisać funkcję w VB.NET, które mapę do C# logicznego operatora. To musi wyglądać tak:

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

Dziękuję za wyjaśnienia, niestety, jeśli używam op_LogicalNot nie wolno mi również używać operatora VB Not, więc mogę go mieć dziwne w VB lub dziwne w C#. Po prostu trzymam się przy użyciu operatora bitowego w C#. –

+1

Fascynujące, wizualne studio skarży się, że metoda o tej samej nazwie jest zadeklarowana dwukrotnie, ale działa i działa. Pozdrawiam. –