public void Show()
{
//四種不同方法擷取系統下mscorlib.dll 下的類型Type
int x = 10;
Assembly a = Assembly.Load("mscorlib");
Type t1 = typeof(int);
Type t2 = x.GetType();
Type t3 = a.GetType("System.Int32");
Type t4 = Type.GetType("System.Int32");
Response.Write(t1 == t2);
Response.Write(t2 == t3);
Response.Write(t3 == t4);
//輸出True True True 執行效率對比 t1>t2>t3>t4
//通過迴圈找出mscorlib.dll裡面的ParameterInfo
Assembly b = Assembly.Load("mscorlib");
foreach (Type t in b.GetTypes())
{
foreach (MethodInfo Method in t.GetMethods())
{
ParameterInfo[] Params = Method.GetParameters();
foreach (ParameterInfo Param in Params)
{
Response.Write(Param.Name);
Response.Write(Param.ParameterType);
Response.Write(Param.Position);
Response.Write(Param.IsOptional);
}
}
}
}
//輸出泛型的FullName,IsGenericParameter屬性 //PrintTypeParams(typeof(List<string>));
void PrintTypeParams(Type t)
{
Response.Write(t.FullName);
foreach (Type ty in t.GetGenericArguments())
{
Console.WriteLine("{0}{1}{2}", ty.FullName, ty.IsGenericParameter, ty.IsGenericParameter ? ty.GenericParameterPosition : 0);
}
}
void xiaobaigang()
{
Type listType1 = typeof(List<>);
Response.Write(listType1.IsGenericType);//是泛型型別
Response.Write(listType1.ContainsGenericParameters);//判斷是否是開放泛型
Type listType = typeof(List<int>);
Response.Write(listType.IsGenericType);//是泛型型別
Response.Write(listType.ContainsGenericParameters);//判斷是否開放泛型
//typeof(List<>).Equals(typeof(List<string>).GetGenericTypeDefinition() 是相等的
if (typeof(List<>).Equals(typeof(List<string>).GetGenericTypeDefinition()))
{
Response.Write("GetGenericTypeDefinition屬性測試");
}
//泛型 開放類型--->封閉類型動態執行個體化(構造類型)
Type listType2 = typeof(List<>);
Type listOfIntType = listType2.MakeGenericType(typeof(string));
Response.Write(listOfIntType.FullName);
}