C#反射机制 Type类型

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;

}

}

}