बहुरूपता सुविधा एक भाषा/कार्यक्रम क्रम कि विधि के लिए भेजा मापदंडों के प्रकार के आधार पर लागू करने की जो पद्धति पर के दौरान निर्णय लेने के लिए अनुमति देता है।
भाषा/क्रम द्वारा इस्तेमाल किया पैरामीटर की संख्या बहुरूपता का 'प्रकार' एक भाषा के द्वारा समर्थित निर्धारित करता है।
सिंगल डिस्पैच पॉलिमॉर्फिज्म का एक प्रकार है जहां कॉल का निर्धारण करने के लिए केवल एक पैरामीटर का उपयोग किया जाता है (संदेश का प्राप्तकर्ता - this
, या self
)।
एकाधिक प्रेषण बहुरूपता का एक प्रकार है, जहां कई मानकों में जो विधि कॉल करने का पता लगाने में किया जाता है। इस मामले में, विधि के साथ-साथ विधि पैरामीटर के प्रकार का उपयोग करने के लिए किस विधि को आमंत्रित करने के लिए उपयोग किया जाता है।
तो तुम कह सकते हैं कि बहुरूपता सामान्य शब्द है और कई और एकल प्रेषण बहुरूपता के विशिष्ट प्रकार के कर रहे हैं।
परिशिष्ट: संकलन समय के दौरान ओवरलोडिंग होती है। यह संकलन के दौरान उपलब्ध प्रकार की जानकारी का उपयोग करता है यह निर्धारित करने के लिए कि किस प्रकार की विधि कॉल करें। सिंगल/एकाधिक प्रेषण रनटाइम के दौरान होता है।
नमूना कोड:
using NUnit.Framework;
namespace SanityCheck.UnitTests.StackOverflow
{
[TestFixture]
public class DispatchTypes
{
[Test]
public void Polymorphism()
{
Baz baz = new Baz();
Foo foo = new Foo();
// overloading - parameter type is known during compile time
Assert.AreEqual("zap object", baz.Zap("hello"));
Assert.AreEqual("zap foo", baz.Zap(foo));
// virtual call - single dispatch. Baz is used.
Zapper zapper = baz;
Assert.AreEqual("zap object", zapper.Zap("hello"));
Assert.AreEqual("zap foo", zapper.Zap(foo));
// C# has doesn't support multiple dispatch so it doesn't
// know that oFoo is actually of type Foo.
//
// In languages with multiple dispatch, the type of oFoo will
// also be used in runtime so Baz.Zap(Foo) will be called
// instead of Baz.Zap(object)
object oFoo = foo;
Assert.AreEqual("zap object", zapper.Zap(oFoo));
}
public class Zapper
{
public virtual string Zap(object o) { return "generic zapper" ; }
public virtual string Zap(Foo f) { return "generic zapper"; }
}
public class Baz : Zapper
{
public override string Zap(object o) { return "zap object"; }
public override string Zap(Foo f) { return "zap foo"; }
}
public class Foo { }
}
}
यह एक बहुत अच्छी जवाब है - आप कम कोड के टुकड़े जोड़ने यदि प्रत्येक का एक उदाहरण दिखाने के लिए, मुझे लगता है कि मैं उत्तर के रूप में यह स्वीकार करेंगे। – raldi
वहां आप जाते हैं। :) – jop
उत्कृष्ट उत्तर! ए ++++++ फिर से पूछें – raldi