2014-12-12 33 views
7

Tôi có một lớp VB quá tải toán tử Not; điều này dường như không thể sử dụng được từ các ứng dụng C#.Sử dụng toán tử quá tải VB.NET Không sử dụng toán tử C#

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

Tôi có thể sử dụng trong VB.NET:

If Not MyClassInstance Then 
    ' Do something 
End If 

Tôi cố gắng để chúng ta điều này trong một ứng dụng C# nhưng nó sẽ không xây dựng.

if (!MyClassInstance) 
{ 
    // do something 
} 

tôi nhận được lỗi

Operator '!' không thể áp dụng cho toán hạng của loại 'MyClass'

Bất cứ ai có thể cho tôi biết những gì tôi đang thiếu?

+0

hãy thử viết tên lớp bằng dấu ngoặc ôm bởi vì bạn phải gọi hàm đó trả về giá trị boolean. tức là 'if (! MyClassInstance()) { // làm điều gì đó }' – sohaiby

Trả lời

15

Toán tử Not trong VB.NET là một toán tử bitwise, nó tạo ra phần bổ sung cho toán hạng của nó. Nó không tương đương với toán tử ! của C#, một toán tử logic. Bạn phải sử dụng toán tử Bitwise tương đương trong C# để sử dụng VB.NET điều hành quá tải của bạn:

if(~MyClassInstance) 
{ 
    // do something 
} 

Bạn có thể viết một hàm trong VB.NET rằng sẽ bản đồ để các nhà điều hành C# logic. Cần phải có dạng như sau:

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

Cảm ơn bạn đã giải thích, thật không may nếu tôi sử dụng op_LogicalNot Tôi không được phép sử dụng toán tử VB Not, vì vậy tôi có thể có nó lạ trong VB hoặc lạ trong C#. Tôi sẽ chỉ sử dụng toán tử bitwise trong C#. –

+1

Hấp dẫn, Visual studio phàn nàn rằng một phương thức có cùng tên được khai báo hai lần, nhưng nó xây dựng và chạy. Chúc mừng. –

Các vấn đề liên quan