2011-04-12 9 views
20

मैं एक अमूर्त वर्ग लिख रहा हूं क्योंकि मैं कुछ सामान्य रूप से उपयोग किए जाने वाले तरीकों को प्रदान करना चाहता हूं, कुछ विधियों की आवश्यकता होती है जो बहुत विशिष्ट होंगी, और कुछ तरीकों को "विस्तारित" करने की अनुमति देंगी। एक कंपाइलर त्रुटि में बंपिंग के बाद मैं सोच रहा हूं कि कोई बाहरी, अमूर्त, और आंशिक कीवर्ड के बीच मतभेदों को समझा सकता है। उनका क्या मतलब है और मुझे कब/कहां उपयोग करना चाहिए?एक अमूर्त वर्ग में विधियों के लिए बाहरी, सार और आंशिक के बीच अंतर क्या हैं?

उत्तर

26

extern ऐसा कुछ होने की संभावना नहीं है जिसे आप उपयोग करना चाहते हैं। इसका मतलब है कि विधि लागू की गई है, लेकिन बाहरी रूप से लागू की गई - और आमतौर पर इंटरऑप परिदृश्यों में उपयोग की जाती है जहां आप बाहरी कोड में लागू विधि को परिभाषित कर रहे हैं।

abstract, दूसरी तरफ, इसका मतलब है कि आप विधि के लिए एपीआई परिभाषित कर रहे हैं, लेकिन कार्यान्वयन प्रदान नहीं कर रहे हैं। उप-वर्ग को abstract चिह्नित किसी भी विधि या गुणों के लिए कार्यान्वयन प्रदान करना होगा, या abstract स्वयं ही होना चाहिए। यदि आप बेस क्लास बनाना चाहते हैं और एक विधि या संपत्ति है जिसे सबक्लास द्वारा कार्यान्वित किया जाना है, तो आप abstract का उपयोग करना चाहेंगे।

partial कक्षाएं और विधियां केवल एक संकलन उपकरण हैं। वे आपको अपने प्रकार को परिभाषित करने के लिए एकाधिक फ़ाइलों का उपयोग करने की अनुमति देते हैं। इसका उपयोग ज्यादातर स्वचालित रूप से जेनरेट किए गए कोड के साथ किया जाता है (यानी: एक डिज़ाइनर डिज़ाइनर जेनरेट कोड को आंशिक कक्षा को परिभाषित करने वाली एक अलग फ़ाइल में रखेगा, ताकि आप कार्यान्वयन विवरणों को देखे बिना लापता टुकड़े भर सकें)। यह किसी ऐसी चीज की संभावना नहीं है जिसका उपयोग आप कक्षा को परिभाषित करने के लिए सीधे करेंगे।

3

Extern: http://msdn.microsoft.com/en-us/library/e59b22c5%28v=vs.80%29.aspx

यह वही सदस्य संशोधित करने के लिए एक साथ सार (सी # संदर्भ) और निर्वासन संशोधक का उपयोग करने में कोई त्रुटि है। बाहरी संशोधक का उपयोग करना मतलब है कि विधि को सी # कोड के बाहर लागू किया गया है, जबकि अमूर्त संशोधक का उपयोग करते हुए इसका मतलब है कि विधि कार्यान्वयन कक्षा में प्रदान नहीं किया गया है।

सार: http://msdn.microsoft.com/en-us/library/sf985hc5%28v=vs.80%29.aspx

संकेत मिलता है कि एक वर्ग ही अन्य वर्गों के आधार वर्ग में किया जाता है एक वर्ग घोषणा में सार संशोधक का उपयोग करें। सार तत्व के रूप में चिह्नित, या एक अमूर्त वर्ग में शामिल सदस्यों को सार वर्ग द्वारा प्राप्त कक्षाओं द्वारा लागू किया जाना चाहिए।

आंशिक: http://msdn.microsoft.com/en-us/library/wbx7zzdd%28v=vs.80%29.aspx

आंशिक प्रकार परिभाषाएं एक वर्ग की परिभाषा, struct या इंटरफ़ेस से अधिक फ़ाइलों में विभाजित किया जा करने के लिए अनुमति देते हैं।

4

एक extern विधि आमतौर पर एक डीएल-आयात (पी/आमंत्रण) के माध्यम से लागू की जा रही है - इसलिए इसमें कार्यान्वयन होता है - आप इसे देख नहीं सकते हैं।

partial विधि मुख्य रूप से जेनरेट कोड में कार्यक्षमता को इंजेक्ट करने के तरीके के रूप में कोड-जनरेशन के साथ उपयोगी है। वे वैकल्पिक, केवल निजी हैं, और केवल मौजूद हैं यदि आप अन्य आधा प्रदान करते हैं। इस तरह निश्चित असाइनमेंट को आश्वस्त करने के लिए रिटर्न/आउट मानों के आसपास कुछ सीमाएं भी हैं। अगर कोई कार्यान्वयन नहीं है तो आंशिक तरीकों के लिए कॉल पूरी तरह से कंपाइलर द्वारा छोड़ा जाएगा।

एक abstract विधि वह है जहां कार्यान्वयन को व्युत्पन्न प्रकार द्वारा प्रदान किया जाना है।रनटाइम सुनिश्चित करता है कि यदि आपके पास अभी भी अनुपूरक सार विधियां हैं, तो आपको कोई उदाहरण नहीं मिल सकता है, इसलिए आपको आश्वासन दिया जाता है कि वे रनटाइम पर मौजूद होंगे।

4

Extern आप dll आयात के माध्यम से तरीकों का उपयोग की अनुमति देगा और इस से आपको लगता है कि विधि है कि यह बाहरी स्रोतों

आंशिक से आ रहा है करने के लिए एक विशेष अर्थ दे रहे हैं:

  1. एक आंशिक विधि घोषित किया जाना चाहिए एक आंशिक वर्ग या आंशिक struct
  2. भीतर आप आंशिक विधि पर पहुँच संशोधक नहीं हो सकता
  3. एक आंशिक विधि का उपयोग संशोधक या आभासी, सार, ओवरराइड, नई, से नहीं हो सकता एल्ड, या बाहरी संशोधक
  4. आंशिक विधि अलग घोषणा से पहले इसका कार्यान्वयन नहीं कर सकता है।
  5. आंशिक विधि केवल परिभाषित की जा सकती है और उसी आंशिक कक्षा में घोषित नहीं की जा सकती है।

* आंशिक और सार विधि के बीच सबसे महत्वपूर्ण अंतर के आंशिक क्रियान्वयन वैकल्पिक है, लेकिन सार विधि के कार्यान्वयन अनिवार्य है *

सार तरीकों सख्ती से व्युत्पन्न गैर सार में कार्यान्वयन वर्ग

बुनियादी आवश्यकता है अमूर्त तरीकों का उपयोग करना है, उन्हें कक्षा का उपयोग करने के लिए लागू करने की आवश्यकता है क्योंकि वे विधियां उस वर्ग को कुशलता से लाभ उठाने में मदद करती हैं

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