using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace 基於System.Type的反射
{
class Program
{
static void Main(string[] args)
{
//1.使用GetType() 反射類型
string a = "Hello world.";
Type t = a.GetType();
Console.WriteLine(t.FullName);
//2.使用Type.GetType() 反射類型
Type t1 = Type.GetType("System.String", false, true);
Console.WriteLine(t1.FullName);
//3.使用typeof獲取類型
Type t2 = typeof(string);
Console.WriteLine(t2.FullName);
//通過方法獲取對象的方法
GetMethods(t, BindingFlags.Public | BindingFlags.Instance);
// Console.WriteLine("join Methods:{0}",t.GetMethod("Copy"));
// Console.WriteLine("-----------------------------------------------------------");
// //知識點補充:抽象類不能實例化
#region 動態加載程序集
// //動態加載.net2.0所有程序集,並獲取所有類型
Assembly objAssembly;
objAssembly = Assembly.Load("mscorlib,2.0.0.0,Neutral,b77a5c5619934e089");
Type[] types = objAssembly.GetTypes();
foreach (var t3 in types)
{
Console.WriteLine(t3.Name);
}
//獲取當前執行的程序集
objAssembly = Assembly.GetExecutingAssembly();
//檢查對象(基於System.Type的反射.car)
Type t4 = objAssembly.GetType("基於System.Type的反射.car", false, true);
//創建一個當前對象的實例
object obj = Activator.CreateInstance(t4);
//獲取當前對象中存在的方法
MethodInfo mi = t4.GetMethod("IsMoveing");
//判斷當前對象是否存在指定的方法 obj指實例化對象,null指IsMoveing()的參數
var ismoving = (bool)mi.Invoke(obj, null);
if(ismoving)
{
Console.WriteLine("Yes");
}
else
{
Console.WriteLine("NO");
}
#endregion
Console.ReadLine();
}
/// <summary>
/// 獲取對象的所有方法 GetProperty()獲取所有屬性 GetFields()獲取所有字段
/// </summary>
/// <param name="t"></param>
public static void GetMethods(Type t,BindingFlags f)
{
MethodInfo[] mi = t.GetMethods(f);
foreach (MethodInfo item in mi)
{
Console.WriteLine("{0}",item.Name);
}
}
}
class car
{
public bool IsMoveing()
{
return true;
}
}
}