2014-12-12 9 views
7

से ऑपरेटर नहीं है मेरे पास एक वीबी वर्ग है जो Not ऑपरेटर को अधिभारित करता है; यह सी # अनुप्रयोगों से उपयोग करने योग्य प्रतीत नहीं होता है।अधिभारित VB.NET का उपयोग सी #

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

मैं VB.NET में इस का उपयोग कर सकते हैं:

If Not MyClassInstance Then 
    ' Do something 
End If 

मैं एक सी # आवेदन में यह करने के लिए कोशिश कर रहा हूँ, लेकिन यह निर्माण नहीं होगा।

if (!MyClassInstance) 
{ 
    // do something 
} 

मैं त्रुटि

ऑपरेटर के लिए '!' 'MyClass'

ऑपरेटिंग पर लागू नहीं किया जा सकता है क्या कोई मुझे बता सकता है कि मुझे क्या याद आ रही है?

+0

पैरामीटर ब्रेसिज़ के साथ कक्षा का नाम लिखने का प्रयास करें क्योंकि आपको उस फ़ंक्शन को कॉल करना होगा जो एक बूलियन मान लौटा रहा है। यानी 'if (! MyClassInstance()) { // कुछ करें }' – sohaiby

उत्तर

15

Not वीबीएनईटी में ऑपरेटर बिटवाई ऑपरेटर है, यह अपने ऑपरेंड के पूरक का उत्पादन करता है। इसमें सी # के ! ऑपरेटर, एक तार्किक ऑपरेटर के बराबर नहीं है।

if(~MyClassInstance) 
{ 
    // do something 
} 

आप VB.NET में एक समारोह है कि सी # तार्किक ऑपरेटर के लिए नक्शे होगा लिख ​​सकते हैं: आप अपने VB.NET ऑपरेटर अधिभार उपयोग करने के लिए सी # में बराबर बिटवाइज़ ऑपरेटर का उपयोग करना चाहिए। इसे इस तरह दिखने की जरूरत है:

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

व्याख्या के लिए धन्यवाद, दुर्भाग्य से यदि मैं op_LogicalNot का उपयोग करता हूं तो मुझे वीबी नोट ऑपरेटर का उपयोग करने की अनुमति नहीं है, इसलिए मैं इसे प्राप्त कर सकता हूं वीबी में अजीब या सी # में अजीब। मैं सी # में बिटवाई ऑपरेटर का उपयोग करने के लिए बस रहूंगा। –

+1

आकर्षक, विजुअल स्टूडियो शिकायत करता है कि एक ही नाम वाली विधि दो बार घोषित की जाती है, लेकिन यह बनाता है और चलाता है। चीयर्स। –