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;
}
}
}