//反射
public static void Reflection()
{對象
//調用非靜態方法get
// 1.Load(命名空間名稱),GetType(命名空間.類名)
Type type = Assembly.Load("ConsoleApp").GetType("ConsoleApp.Program");//動態加載dll 並獲取類型
//2.GetMethod(須要調用的方法名稱)
MethodInfo method = type.GetMethod("GetReflect", new Type[] { typeof(string), typeof(int) });
// 3.調用的實例化方法須要建立類型的一個實例
object obj = Activator.CreateInstance(type);
//4.方法須要傳入的參數
object[] parameters = new object[] { "xxx", 10 };
// 5.調用方法
string result = (string)method.Invoke(obj, parameters);string
//調用靜態方法it
type.InvokeMember("GetReflect", System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static |
System.Reflection.BindingFlags.Public, null, null, new object[] { "sss", 15 });io
//獲取方法名稱class
MethodInfo[] info = typeof(Program).GetMethods();
foreach (MethodInfo item in info)
{
Console.WriteLine(item.Name);
var parames = item.GetParameters();
foreach(var parame in parames)
{
Console.WriteLine(parame.Name + "--" + parame.ParameterType.Name);
}
}object
//獲取對象的屬性及類型
Type tt = typeof(User);
var fields = tt.GetProperties();
foreach (var item in fields)
{
Console.WriteLine(item.Name + ":" + item.GetValue(user, null) + ":" + item.PropertyType);
}foreach
//獲取對象的屬性並賦值,調用類中的方法命名空間
Type projectType = typeof(User);
object projectInstance = Activator.CreateInstance(projectType);反射
PropertyInfo propertyName = projectType.GetProperty("name");
propertyName.SetValue(projectInstance, "小明");
var projectName = propertyName.GetValue(projectInstance);
PropertyInfo propertyAge = projectType.GetProperty("age");
propertyAge.SetValue(projectInstance, 99, null);
var projectAge = propertyAge.GetValue(projectInstance);
Console.WriteLine("姓名:{0} 年齡:{1}", projectName, projectAge);
MethodInfo method1 = projectType.GetMethod("GetReflect", new Type[] { typeof(string), typeof(int) });
object[] parsArray = { "武大郎",55 };
method1.Invoke(projectInstance, parsArray);
}
public static string GetStaticReflect(string name, int age)
{
Console.WriteLine("反射執行了" + name + "今年" + age + "歲了");
return name + "123";
}
public class User
{
public string name { get; set; }
public int age { get; set; }
public void GetReflect(string name, int age) { Console.WriteLine("User反射執行了" + name + "今年" + age + "歲了"); } }