System.Type类用法
使用这个类的对象的方法、字段、属性来查找有关该类型的所有信息。
案例中所使用到的类
public class Dept
{
public int deptID;
int campusID;
string deptName;
string deptReMark;
string campusName;
public int CampusID { get => campusID; set => campusID = value; }
public string DeptName { get => deptName; set => deptName = value; }
public string DeptReMark { get => deptReMark; set => deptReMark = value; }
public string CampusName { get => campusName; set => campusName = value; }
public Dept() { Console.WriteLine("默认无参构造函数"); }
public void say()
{
Console.WriteLine("不带参数方法");
Console.WriteLine("属性的操作:" + this.CampusName);
}
public static void sayHi()
{
Console.WriteLine("方法1");
}
public string sayHello()
{
Console.WriteLine("方法2");
return "hello";
}
public void one(int a)
{
Console.WriteLine("一个参数" + a);
}
public void one(int a, int b)
{
Console.WriteLine("两个参数" + a + ";" + b);
}
public void two(int a, int b)
{
Console.WriteLine("两个参数" + a + ";" + b);
}
}
Type类的属性
上述运行效果
Type中的常见方法
Type type = typeof(Dept);//获取给定类的类型
object objects = Activator.CreateInstance(type);//得到类型实例,此步骤会得到Dept类的无参构造函数。
1、取得该类构造函数信息
ConstructorInfo constructor = type.GetConstructor(new Type[] { typeof(Dept) });
ConstructorInfo [] constructorInfos = type.GetConstructors();
foreach (ConstructorInfo constructorInfo in constructorInfos)
{
constructorInfo.Invoke(obj, null);
}
结果:
2、取得类的事件
EventInfo[] eventInfo = type.GetEvents();
foreach(EventInfo info in eventInfo)
{
Console.WriteLine(info.Name);
}
3、获取该类字段的信息
FieldInfo [] fieldInfos = type.GetFields();
foreach (FieldInfo fieldInfo in fieldInfos)
{
Console.WriteLine(fieldInfo.Name);
}
结果:
4、获取类所有成员信息
MemberInfo [] info = type.GetMembers();
foreach (MemberInfo mi in info)
{
Console.WriteLine(mi.Name);
}
结果:
5、获取类的方法
MemberInfo [] memberInfos = type.GetMethods();
foreach (MemberInfo memberInfo in memberInfos)
{
Console.WriteLine(memberInfo.Name);
}
结果:
6、获取类中的属性
PropertyInfo [] propertyInfos = type.GetProperties();
foreach (PropertyInfo propertyInfo in propertyInfos)
{
Console.WriteLine(propertyInfo.Name);
}
结果:
7、获取类实现的接口信息
Type[] types = type.GetInterfaces();
foreach (Type t in types)
{
Console.WriteLine(t.Name);
}
8、给属性赋值
PropertyInfo infos = type.GetProperty("CampusName");
infos.SetValue(objects, "66666");
MemberInfo m = (MemberInfo)type.GetMethod("say").Invoke(objects, null);
结果:
9、 //不带参数方法调用
type.GetMethod("sayHi", new Type[] { }).Invoke(objects, null);//Invoke,:第一个参数 类型实例,第二个参数 所调方法参数
//带两个参数
MethodInfo methodInfo2 = type.GetMethod("two");
methodInfo2.Invoke(objects, new object[] { 2, 3 });
//重载方法带一个参数
MethodInfo methodInfo = type.GetMethod("one", new Type[] { typeof(int) });
methodInfo.Invoke(objects, new object[] { 2 });
//重载方法两个参数
MethodInfo m1 = type.GetMethod("one", new Type[] { typeof(int), typeof(int) });
m1.Invoke(objects, new object[] { 1, 2 });