dynamic
कीवर्ड के साथ सबसे दिलचस्प बात यह है कि आप जो कर सकते हैं वह है: डबल-प्रेषण का कार्यान्वयन। ओओपी में, रनटाइम पर वर्चुअल (या सार) विधि का एक विशेष कार्यान्वयन एक ऑब्जेक्ट के रनटाइम प्रकार के आधार पर कहा जाता है जो सदस्य फ़ंक्शन में this
के रूप में पारित किया जाता है। इसे एकल प्रेषण कहा जाता है, क्योंकि प्रेषण एकल ऑब्जेक्ट के रनटाइम प्रकार पर निर्भर करता है। डबल-प्रेषण में, यह दो ऑब्जेक्ट्स के प्रकार पर निर्भर करता है।
यहाँ एक उदाहरण है:
public abstract class Base {}
public class D1 : Base {}
public class D2 : Base {}
public class D3 : Base {}
public class Test
{
public static void Main(string[] args)
{
Base b1 = new D1();
Base b2 = new D2();
Method(b1,b2); //calls 1
Method(b2,b1); //calls 1: arguments swapped!
}
public static void Method(Base b1, Base b2) // #1
{
dynamic x = b1;
dynamic y = b2;
Method(x,y); // calls 2 or 3: double-dispatch - the magic happens here!
}
public static void Method(D1 d1, D2 d2) // #2
{
Console.WriteLine("(D1,D2)");
}
public static void Method(D2 d2, D1 d1) // #3: parameters swapped
{
Console.WriteLine("(D2,D1)");
}
}
आउटपुट:
(D1,D2)
(D2,D1)
है, वास्तविक विधि, कार्यावधि में चुना जाता है, दो वस्तुओं के क्रम प्रकार के आधार पर उस के रूप में करने का विरोध किया एक वस्तु
बार/प्रतिबिंब सही नहीं है। Var संकलन समय पर मूल्यांकन टाइप टाइप वैरिएबल है। दूसरी तरफ प्रतिबिंब रन टाइम मूल्यांकन किया जाता है। मुझे लगता है कि प्रतिबिंब var से गतिशील के साथ पक्ष में खड़ा होगा। –
हम वास्तव में यह नहीं बता सकते कि आप जो जानते हैं, वह हमें बताए बिना पर्याप्त है कि आप क्या जानते हैं। क्या फायदे हैं? कृपया इस जानकारी को प्रश्न में जोड़ें। –