我從api文檔中瞭解到ReflectionOnlyGetType返回的類型很像GetType。不同之處在於,使用ReflectionOnlyGetType時,該類型僅用於反射而不用於執行。ReflectionOnlyGetType vs 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可以很方便;這基本上是一個完全獨立的加載器/解析器。 –