2012-02-04 28 views
6

मैं सी # में एक ऑपरेटर को ओवरलोड कोशिश कर रहा हूँ के साथ अधिक भार ऑपरेटर (क्यों नहीं पूछते!) Lists पर लागू होने वाला। उदाहरण के लिए, मैं लिखने में सक्षम होना चाहते हैं:सी # सूची <T>

List<string> x = // some list of things 
List<string> y = // some list of things 
List<string> z = x + y 

ताकि 'z' 'y' की विषयवस्तु के बाद 'एक्स' की सभी सामग्री शामिल हैं। मुझे पता है कि दो सूचियों को गठबंधन करने के पहले से ही तरीके हैं, मैं सिर्फ यह समझने की कोशिश कर रहा हूं कि जेनरेटिक संरचनाओं के साथ ऑपरेटर अधिभार कैसे काम करता है।

(यह Systems.Collections.Generic से List वर्ग, जिस तरह से कर रहा है।)

+0

आपकी नमूना में सूची 'आपका अपना कार्यान्वयन है? या 'System.Collections.Generic' नेमस्पेस से? –

+0

यह सिस्टम से है। चयन। जेनेरिक। – Joe

उत्तर

7

जहाँ तक मुझे पता है, यह संभव नहीं है: आप प्रकार यह का उपयोग करता है में ऑपरेटर अधिभार को लागू करना चाहिए। चूंकि List<T> आपका प्रकार नहीं है, इसलिए आप इसमें ऑपरेटरों को ओवरराइड नहीं कर सकते हैं।

हालांकि, अगर आप List<string> से अपने खुद के प्रकार निकाले जाते हैं और अपनी कक्षा के अंदर ऑपरेटर ओवरराइड कर सकते हैं।

class StringList : List<string> { 
    public static StringList operator +(StringList lhs, StringList rhs) { 
    } 
} 
+2

यह मत भूलना कि ऑपरेटरों को संकलन-समय के प्रकारों के आधार पर चुना जाता है। तो 'सूची ए = नई स्ट्रिंगलिस्ट(), बी = नई स्ट्रिंगलिस्ट(); var c = a + b' काम नहीं करेगा। – svick

+1

@svick आप बिल्कुल सही हैं, यह किसी भी तरह ऑपरेंड कि * स्थिर * अपने वर्ग के रूप में टाइप नहीं कर रहे हैं जहां ऑपरेटर परिभाषित पर अपने ऑपरेटर को स्वीकार करने में संकलक चाल करने के लिए संभव नहीं है। – dasblinkenlight

+0

तो क्यों मैं '*' 'String's के साथ काम करने को ओवरलोड सकते हैं, लेकिन' सूची 'रों? – Joe

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