मैं एपीआई दस्तावेज से समझता हूं कि ReflectionOnlyGetType एक प्रकार देता है, जो GetType की तरह है। अंतर यह है कि ReflectionOnlyGetType के साथ, प्रकार केवल प्रतिबिंब के लिए लोड किया जाता है, निष्पादन के लिए नहीं।ReflectionOnlyGetType बनाम GetType
तो क्यों काम करता है:
Type t = Type.ReflectionOnlyGetType("System.Collections.Generic.List`1[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", false, false);
ConstructorInfo[] cis = t.GetConstructors();
foreach (ConstructorInfo ci in cis)
{
if (ci.GetParameters().Length == 0)
{
// ! no arg constructor found! let's call it!
Object o = ci.Invoke(new Object[]{});
Console.WriteLine("But wait, it was supposed to be reflection only??");
Console.WriteLine(o.GetType().Name);
List<String> lli = (List<String>)o;
lli.Add("but how can this be?");
Console.WriteLine(lli.Count);
Console.WriteLine("I am doing a lot more than reflection here!");
}
}
मेरे सवाल यह है: मैं एक से अधिक इस प्रकार के सदस्यों पर प्रतिबिंबित करने के लिए सक्षम होने लगते हैं। क्या मैंने "निष्पादन" को गलत समझा है जब वे कहते हैं कि "केवल प्रतिबिंब के लिए, निष्पादन के लिए नहीं" प्रकार लोड किया गया है? या ReflectionOnlyGetType एक अलग (गैर-प्रतिबिंब-केवल) प्रकार लौटा रहा है यदि प्रकार पहले से ही "लोड" था और यहां mscorlib में होने के कारण लोड किया गया था? या यह पूरी तरह से कुछ अलग है?
'mscorlib' पहले से ही क्रम से निष्पादन के लिए लोड किया गया है। –
यदि आप ऐसा कुछ चाहते हैं जो * गारंटीकृत * प्रतिबिंबित हो, केवल IKVM.Reflection.dll आसान हो सकता है; यह मूल रूप से एक पूरी तरह से अलग लोडर/पार्सर है। –