反射
反射(Reflection)是指程序可以访问、检测和修改它本身状态或行为的一种能力,反射中提供了用来描述程序集、模块和类型的对象,可以使用反射动态地创建类型的实例,并将类型绑定到现有对象,或者从现有对象中获取类型,然后调用其方法或访问其字段和属性。 如果代码中使用了特性,也可以利用反射来访问它们。
反射的用途
* 在运行时查看视图属性信息;
* 检查装配中的各种类型并实例化这些类型;
* 在后期绑定到方法和属性;
* 在运行时创建新类型,然后使用这些类型执行一些任务。
cs
using System;
class MainClass
{
public static void Main(string[] args)
{
//1.通过对象获取到这个对象所属类的Type对象
TestClass c = new TestClass();
Type t = c.GetType();
//2.通过Type类中的静态方法GetType获取到类的Type对象
//Type t = Type.GetType("TestClass");
//3.通过typeof关键字获取到类的Type对象
//Type t = typeof(TestClass);
Console.WriteLine(t.Name);//获取类名(不带命名空间)
Console.WriteLine(t.FullName);//获取类名(带命名空间)
Console.WriteLine(t.Assembly);//获取程序集
Console.WriteLine(t.BaseType);//获取基类类型
Console.WriteLine("----------获取类中字段");
var fields = t.GetFields();
foreach (var temp in fields)
{
Console.WriteLine(temp.Name);
}
Console.WriteLine("----------获取类中属性");
var properties = t.GetProperties();
foreach (var temp in properties)
{
Console.WriteLine(temp.Name);
}
Console.WriteLine("----------获取类中方法");
var methods = t.GetMethods();
foreach (var temp in methods)
{
Console.WriteLine(temp.Name);
}
Console.WriteLine("----------获取类中成员");
var members = t.GetMembers();
foreach (var temp in members)
{
Console.WriteLine(temp.Name);
}
Console.WriteLine("----------获取类中嵌套类");
var nesteds = t.GetNestedTypes();
foreach (var temp in nesteds)
{
Console.WriteLine(temp.Name);
}
Console.WriteLine("----------获取类中构造函数");
var constructors = t.GetConstructors();
foreach (var temp in constructors)
{
Console.WriteLine(temp.Name);
}
//获取所有程序集
var allAssemblies = AppDomain.CurrentDomain.GetAssemblies()
}
}
public class TestClass
{
public string str;
public int num { get; set; }
public void Fun()
{
}
public class TestNestedClass
{
}
}