2014-12-12 10 views
7

Ich habe eine VB-Klasse, die den Operator Not überlädt; Dies scheint von C# -Anwendungen nicht verwendbar zu sein.Verwenden überladener VB.NET Not-Operator von C#

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

Ich kann dies in VB.NET verwenden:

If Not MyClassInstance Then 
    ' Do something 
End If 

ich uns bin versucht, diese in einer C# .NET-Anwendung, aber es wird nicht bauen.

if (!MyClassInstance) 
{ 
    // do something 
} 

Ich erhalte den Fehler

Operator '!' kann nicht auf Operanden vom Typ 'MyClass' angewendet werden

Kann mir jemand sagen, was ich vermisse?

+0

Versuchen Sie, den Klassennamen mit Parameter Klammern zu schreiben, weil Sie diese Funktion aufrufen müssen, die einen booleschen Wert zurückgibt. dh 'if (! MyClassInstance()) { // Etwas }' – sohaiby

Antwort

15

Der Not-Operator in VB.NET ist ein bitweiser-Operator, der das eine Komplement seines Operanden erzeugt. Es hat nicht das Äquivalent von C# ! Operator, ein logischer Operator. Sie müssen die entsprechende Bit-Operator in C# verwenden, um Ihre VB.NET Betreiber Überlastung verwenden:

if(~MyClassInstance) 
{ 
    // do something 
} 

Sie können eine Funktion in VB.NET schreiben, die logische Verknüpfung mit dem C# abbildet. Das muss so aussehen:

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

Vielen Dank für die explaination, leider, wenn ich die op_LogicalNot benutze ich nicht erlaubt ist, auch den VB Nicht-Operator zu verwenden, so kann ich es habe seltsam in VB oder seltsam in C#. Ich bleibe nur bei der Verwendung des bitweisen Operators in C#. –

+1

Faszinierend, beschwert sich Visual Studio, dass eine Methode mit dem gleichen Namen zweimal deklariert wird, aber es erstellt und ausgeführt wird. Prost. –