2010-10-01 17 views
7


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

+7

पर विधि ओवरराइडिंग (पॉलिमॉर्फिज्म) पर वीडियो देखें, आपको * एक * प्रश्न पूछने की आवश्यकता है। इन शर्तों में कुछ भी सामान्य नहीं है। –

+3

क्या आप बेहतर उदाहरण के लिए उदाहरण चाहते हैं? –

+6

क्या इसे 'होमवर्क' के रूप में टैग किया जाना चाहिए? – keyboardP

उत्तर

31

संकलन समय बहुरूपता

विधि से अधिक भार के लिए एक महान उदाहरण है। आपके पास एक ही नाम के साथ दो विधियां हो सकती हैं लेकिन विभिन्न हस्ताक्षरों के साथ। संकलक संकलन समय पर उपयोग करने के लिए सही संस्करण का चयन करेगा।

भागो समय बहुरूपता

एक बच्चे कक्षा में एक माता पिता के वर्ग से एक आभासी विधि ओवरराइड करना एक अच्छा उदाहरण है। एक इंटरफ़ेस से एक वर्ग कार्यान्वयन विधियां है। यह आपको बच्चे द्वारा निर्दिष्ट कार्यान्वयन का उपयोग करते समय कोड में अधिक सामान्य प्रकार का उपयोग करने की अनुमति देता है। यह देखते हुए निम्नलिखित वर्ग परिभाषाएँ:

public class Parent 
{ 
    public virtual void SayHello() { Console.WriteLine("Hello World!"); } 
} 

public class Child : Parent 
{ 
    public override void SayHello() { Console.WriteLine("Goodbye World!"); } 
} 

निम्नलिखित कोड होगा उत्पादन "गुडबाय दुनिया!":

Parent instance = new Child(); 
instance.SayHello(); 

प्रारंभिक

बाइंडिंग संकलन समय पर प्रकार निर्दिष्ट करना:

SqlConnection conn = new SqlConnection(); 

देर से बांधना ing

प्रकार रनटाइम पर निर्धारित होता है:

object conn = Activator.CreateInstance("System.Data.SqlClient.SqlConnection"); 
+1

नेट जेनिक्स यहां तस्वीर में कैसे फिट होते हैं? सी ++ में, टेम्पलेट्स संकलन-समय polymorphism व्यक्त करते हैं। thx –

3

अद्यतन: कृपया इस जवाब देने के लिए एरिक Lippert की टिप्पणी देखें।

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

मुझे यकीन नहीं है कि रन टाइम बनाम संकलन समय polymorphism द्वारा आपका क्या मतलब है।

सी # कंपाइलर संकलन समय पर निर्धारित करेगा कि विधि अधिभार कहा जाएगा। एक उदाहरण का रन-टाइम प्रकार यह निर्धारित करेगा कि किसी विशेष विधि अधिभार के कार्यान्वयन को निष्पादित किया जाएगा। यह अभी भी प्रारंभिक बाध्यकारी माना जाता है, भले ही यह रन टाइम पर होता है, क्योंकि चयनित विधि को एक विशिष्ट आभासी विधि अधिभार के कार्यान्वयन के लिए बाध्य किया जाता है, और इस तरह के कॉल के लिए एक प्रकार से संबंधित अपवाद उत्पन्न करने के लिए संभव नहीं है जैसे कि एक गतिशील भाषा और देर से बाध्यकारी के साथ होता है।

+0

सी # 2 * आभासी प्रेषण * के रूप में भाषा स्तर पर देर से बाध्यकारी का समर्थन करता है। आभासी प्रेषण भाषाओं में विधि कॉल * देर से बाध्य * है * * सटीक विधि * जिसे * रनटाइम * तक निर्धारित नहीं किया जाता है। विधि का * हस्ताक्षर * संकलन समय पर निर्धारित किया जाता है लेकिन * विधि वास्तव में कहा जाता है * नहीं है। सी # 4 गतिशील देर से बाध्यकारी का समर्थन करता है: यह रनटाइम पर विधि (इसके नाम को छोड़कर) के बारे में * सबकुछ * निर्धारित कर सकता है। –

+0

पुन: आपका अपडेट: राय अलग-अलग होती है। कुछ लोग आभासी प्रेषण को देर से बाध्यकारी मानते हैं क्योंकि बुलाया जाने वाला तरीका रनटाइम पर निर्धारित होता है। (ये सी या कुछ अन्य स्थिर बाध्यकारी भाषा में पृष्ठभूमि वाले लोग होते हैं।) कुछ लोग इसे प्रारंभिक बाध्यकारी मानते हैं क्योंकि * स्लॉट * जिसमें विधि सूचक शामिल होगा संकलन समय पर निर्धारित किया जाता है। (ये ऐसे लोग होते हैं जो COM प्रोग्रामिंग या सी ++ में उपयोग किए जाते हैं जहां लगभग हर कॉल वर्चुअल होता है।) मैं व्यक्तिगत रूप से "गतिशील" का अर्थ केवल "देर से बाध्यकारी" का उपयोग करने का प्रयास करता हूं। –

+0

@ एरिक लिपर्ट - ठीक है, यह समझ में आता है। "देर से बाध्यकारी" का आपका उपयोग तब मेरे जैसा लगता है। मैंने हमेशा "शुरुआती" और "देर से" संकेत दिया है, असल में, उस समय, जिस समय त्रुटि गलत होती है जब कुछ गलत हो जाता है। आपकी टिप्पणियों के लिए आभार! –

3

संकलन समय और रन टाइम पॉलीमोर्फिज्म के बीच अंतर के लिए एक बहुत ही सरल और सीधा आगे जवाब।

संकलन समय पॉलीमोर्फिज्म - विधि अधिभार (समान विधि नाम होने पर लेकिन विभिन्न हस्ताक्षर के साथ)।इस URL http://csharp-video-tutorials.blogspot.com/2012/06/part-25-c-tutorial-method-overloading.html

भागो समय बहुरूपता पर अधिक भार विधि पर वीडियो की जांच करें - विधि अधिभावी (रन टाइम पर बच्चे वर्ग अधिरोहित तरीकों लागू, एक आधार वर्ग संदर्भ चर का उपयोग कर चलाने समय बहुरूपता के रूप में कहा जाता है)। कृपया इस यूआरएल http://csharp-video-tutorials.blogspot.com/2012/06/part-23-c-tutorial-polymorphism.html

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