2013-01-07 17 views
5

मैं एक सामान्य वर्ग बनाने के बारे में सोच रहा हूं, और इस बार मैंने तुलनात्मक ऑपरेटरों का उपयोग करके IComparable लागू किए गए प्रकारों का उपयोग करने का विचार किया।क्या कोई इंटरफ़ेस है जो <<और अन्य सभी तुलना ऑपरेटर सक्षम करता है?

मुझे पता है .CompareTo() कार्यात्मक रूप से एक ही ऑपरेशन कर सकता है, लेकिन मुझे लगता है कि एक इंटरफ़ेस होना चाहिए जो तुलना ऑपरेटर लागू करता है।

उत्तर

5

नहीं। ऑपरेटर को इंटरफ़ेस के माध्यम से निर्दिष्ट नहीं किया जा सकता है।

Interfaces संपत्तियों, विधियों और घटनाओं को परिभाषित करता है [लेकिन ऑपरेटरों नहीं] कि कक्षाएं लागू हो सकती हैं।

उल्लेखनीय निकटतम इंटरफ़ेस IComparable है।

कुछ भाषाओं में अधिक चीनी मैपिंग (जैसे स्कैला) है लेकिन वीबी.नेट या सी # नहीं है।

6

एक इंटरफेस को लागू करने के बजाय, यह operator overloading के माध्यम से पूरा किया जाता है।

Public Class MyNumber 
    Public Value As Integer 

    Public Overloads Shared Operator >(ByVal x As MyNumber, ByVal y As MyNumber) As Boolean 
     Return (x.Value > y.Value) 
    End Operator 

    Public Overloads Shared Operator <(ByVal x As MyNumber, ByVal y As MyNumber) As Boolean 
     Return (x.Value < y.Value) 
    End Operator 
End Class 

के बाद ऑपरेटर भार के Shared रूप में परिभाषित किया जाता है, वे एक अंतरफलक द्वारा घोषित नहीं किया जा सकता: तो, कुछ इस तरह अधिक से अधिक और कम-से तुलना ऑपरेटरों, उदाहरण के लिए, तुम कर सकते हो ओवरलोड। वीबीएनईटी में इंटरफेस केवल उदाहरण-सदस्यों की घोषणा कर सकते हैं। वे साझा सदस्यों की घोषणा नहीं कर सकते हैं।

+1

यह अद्भुत है, @ स्टेवेन - यह नहीं पता था कि यह संभव था !!! +1 –

+2

यह एक अच्छी टिप है, लेकिन ऑपरेटर ओवरलोडिंग एक समाधान नहीं है क्योंकि मैं जेनेरिक के साथ काम कर रहा हूं। मुझे पता नहीं था कि 'स्थिर '/' साझा 'फ़ंक्शन इंटरफेस का हिस्सा नहीं हो सकते हैं, हालांकि जानना अच्छा है। –

+1

@ j.i.h। यदि ऐसा है, तो 'आईसीओपरपेबल' जैसे इंटरफेस के लिए यही है। यही कारण है कि वे मौजूद हैं। दुर्भाग्यवश, आप तुलना ऑपरेशन करने के लिए इंटरफ़ेस के माध्यम से गए हैं। –

संबंधित मुद्दे