首页 > 代码库 > .Net实战之反射相关类之间的人体经络关系

.Net实战之反射相关类之间的人体经络关系

--1.类的部分组成成员

技术分享

--2.巧记成员之间的关系

技术分享

 

   [MyTableAttribute("T_UserInfo")]    public class UserInfo : Person, UserService    {        private int _age2;        private int _age;        [DisplayName("年龄")]        public int Age        {            get            {                return _age;            }            set            {                _age = value;            }        }        [DisplayName("姓名")]        public string Name { get; set; }        public void ShowUserInfo()        {            Console.WriteLine(string.Format("name:{0},age:{1}", Name, _age));        }        protected void ShowName()        {            Console.WriteLine("showName:" + Name);        }    }
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]    public class MyTableAttribute : Attribute    {        private string _tableName;        public MyTableAttribute(string name)        {            _tableName = name;        }        public string Name { get { return _tableName; } }    }

 

--3.程序集

   // 加载程序集(大脑)            //获取当前运行目录下的指定程序集名称            Assembly ass = Assembly.Load("ReflectionDemo");            //Assembly.LoadFile(),Assembly.LoadFrom()加载指定文件的程序集

--4.类型

    // 加载中枢神经的 所有经络            //获取该程序集下的所有类型             Type[] types = ass.GetTypes();            //根据类的全名称(命门空间.类名)获取类的信息             Type type1 = ass.GetType("ReflectionDemo.person");            //忽略大小写或找不到该类型抛出异常            //Type type2 = ass.GetType("ReflectionDemo.person2", throwOnError: true, ignoreCase: true);            //获取程序集中公共类型            Type[] publicTypes = ass.GetExportedTypes();            //获取类的类型            Type classUserType = typeof(UserInfo);            //获取实例的类型            UserInfo ui = new UserInfo();            Type instanceType = ui.GetType();            //获取类型的名称            Console.WriteLine(string.Format("typeFullName:{0},typeName:{1}", instanceType.FullName, instanceType.Name));            //是否继承自某个类            Console.WriteLine("是否继承自某个类-----" + typeof(UserInfo).IsSubclassOf(typeof(Person)));            //是否实现了某个接口(接口的实现类型 是否是 指定的类型)            Console.WriteLine("是否实现了某个接口-----" + typeof(UserService).IsAssignableFrom(typeof(UserInfo)));            //是否是public的类型            Console.WriteLine("是否是public的类型-----" + classUserType.IsPublic);

--5.字段、属性、方法、特性

   //获取字段 BindingFlags位标记 获取字段不同的方式            //t.GetField();t.GetFields()            FieldInfo fiAge = t.GetField("_age",BindingFlags.Public |BindingFlags.NonPublic |BindingFlags.Static |BindingFlags.Instance |BindingFlags.DeclaredOnly);            //获取属性 类似Field            t.GetProperties();            PropertyInfo pi = t.GetProperty("");            //pi.CanRead;//能读            //pi.CanWrite;//能写            //获取方法            MethodInfo[] methods = t.GetMethods();            MethodInfo method = t.GetMethod("ShowUserInfo");            //获取特性            MyTableAttribute tabAttr = t.GetCustomAttribute(typeof(MyTableAttribute)) as MyTableAttribute;            if (tabAttr != null)            {                Console.WriteLine("select * from " + tabAttr.Name);            }

技术分享

 

 下一篇,反射的数据操作 

 

.Net实战之反射相关类之间的人体经络关系