कुछ अतिरिक्त कैसे कैंची कोड के साथ चलाने के लिए। मान लीजिए कि आपके पास एक वर्ग है
public class Encoder() {
public void Markdown(IEnumerable<FooContent> contents) { do magic }
public void Markdown(IEnumerable<BarContent> contents) { do magic2 }
}
मान लीजिए कि रनटाइम में आपके पास एक FooContent है
यदि आप संकलन समय पर बाँधना चाहते थे तो आप चाहेंगे
var fooContents = new List<FooContent>(fooContent)
new Encoder().Markdown(fooContents)
हालाँकि आप इसे रनटाइम पर नहीं कर सकते। रनटाइम पर ऐसा करने के लिए आप निम्न कार्य करेंगे:
var listType = typeof(List<>).MakeGenericType(myType);
var dynamicList = Activator.CreateInstance(listType);
((IList)dynamicList).Add(fooContent);
गतिशील रूप से आह्वान करना Markdown(IEnumerable<FooContent> contents)
new Encoder().Markdown( (dynamic) dynamicList)
dynamic
विधि कॉल के उपयोग पर ध्यान दें । रनटाइम पर dynamicList
हो जाएगा List<FooContent>
(अतिरिक्त भी किया जा रहा है IEnumerable<FooContent>
) के बाद से गतिशील का भी उपयोग अभी भी एक जोरदार टाइप किया भाषा रन टाइम बांधने की मशीन उचित चयन करेंगे करने के लिए निहित है Markdown
विधि। यदि कोई सटीक प्रकार मिलान नहीं है, तो यह ऑब्जेक्ट पैरामीटर विधि की तलाश करेगा और यदि न तो रनटाइम बाइंडर अपवाद को मैच किया जाएगा, तो यह चेतावनी दी जाएगी कि कोई भी विधि मेल नहीं खाती है।
इस दृष्टिकोण के लिए स्पष्ट ड्रा संकलन समय पर प्रकार की सुरक्षा का एक बड़ा नुकसान है। फिर भी इन पंक्तियों के साथ कोड आपको बहुत गतिशील अर्थों में काम करने देगा कि रनटाइम अभी भी पूरी तरह से टाइप किया गया है जैसा कि आप इसे होने की उम्मीद करते हैं।