C# 特性和反射
发布日期:2021-06-29 19:13:58
浏览次数:2
分类:技术文章
本文共 3026 字,大约阅读时间需要 10 分钟。
特性的概念
特性是一种允许我们向程序的程序集增加元数据的语言结构,他是用于保存程序结构信息的某种特殊类型的类。 将应用了特性的程序结构叫做目标 设计用来获取和使用元数据的程序叫做特性的消费者 .NET预定了很多特性,我们也可以声明自定义特性什么是元数据?什么是反射?
1、程序是用来处理数据的,文本和特性都是数据,而我们程序的本身也是数据 2、有关程序及其类型的数据被称为元数据,他们保存在程序的程序集中 3、程序在运行时可以查看其他程序集或其本身的元数据,一个运行的程序查看本身的元数据或者其他程序集的元数据的行为叫做反射Type类
Type位于Syatem.Reflection命名空间下 预定义类型(int和long、string等 ),BCL的类型(Console,IEnumerable等) Type类是抽象类,不能实例化对象注意事项:
对于程序中用到的每一个类型,CLR都会创建包含这个类型信息的Type类型的对象程序中用到的每一个类型都会关联到每一个独立的Type类的对象
不管创建的对象有多少个实例,只有一个Type对象会关联到所有的这些实例
获取Type对象
1、Type t=myInstance.GetType();通过类的实例来获取Type对象
在object类有一个GetType方法,返回Type对象,所有的Type类都是从Object类继承的,所以我们可以在任何类型上使用GetType()来获取他的Type对象
2、Type t=typeof(直接通过typeof运算符和类名获取Type对象)
总结:通过Type对象可以获取它对应的类的所有公有的成员成员
首先创建一个MyCliass类
class MyClass { private int id; public int age; private string name; public string Name { get { return name; } set { name = value; }} public void Text1() { } public string Text2() { return "你好"; }}
在主函数中通过Type对象获取类中的成员
static void Main(string[] args) { //每一个类对应一个type对象,这个type对象存储了这个类的方法、数据和成员 MyClass my = new MyClass();//一个类中的具体的数据是存储在对象中的,但type对象只存储类的成员 Type type = my.GetType();//通过对象获取这个对象所属类的type对象 Console.WriteLine(type.Name);//类名 Console.WriteLine(type.Namespace);//命名空间 Console.WriteLine(type.Assembly);//获取对象所在的程序集 FieldInfo[] array = type.GetFields();//获取类中所有公有的字段 foreach (FieldInfo temp in array) { Console.Write(temp.Name + " "); } PropertyInfo[] array2 = type.GetProperties(); foreach (PropertyInfo info in array2) { Console.Write(info.Name + " ");//获取类中所有属性 } MethodInfo[] array3 = type.GetMethods(); foreach (MethodInfo info in array3) { Console.Write(info.Name + " "); //获取类中所有方法和跟类相关联的类中的所有方法 } Console.ReadKey(); }
Assembly类
Assembly类在System.Reflection命名空间中定义,它允许访问给定程序集的元数据,它也包含了可以加载和执行程序集如何加载程序集
1、Assembly assembly1=Assembly.Load(“SomeAssembly”);根据程序集名字加载程序集,它会在本地目录,和全局程序集缓存目录查找符合名字的程序集2、Assembly assembly2=Assembly.LoadFrom(@”c:\xx\xxSomeAssembly.dll”)这里的参数是程序集的完整路径名,他不会在其他位置搜索
Obsolete特性
Obsolete特性简单来讲就是当一些旧的方法已经过时的时候,提示程序猿使用新方法替代旧方法,但是旧方法仍然可以使用class Program { [Obsolete("这个方法过时了,请使用NewMethod()代替")]//该特性表示一个方法被弃用了,但是仍然可以被使用static void OldMethod(){ }static void NewMethod() { Console.WriteLine("新方法"); } static void Main(string[] args) { OldMethod(); Console.ReadKey(); }//当光标移动到被调用的旧方法上的时候,系统就会提示旧方法已经过时class Program { [Obsolete("这个方法过时了,请使用NewMethod()代替", true)]//该特性表示一个方法被弃用了,但是仍然可以被使用 //bool值参数表示是否能调用旧方法,true时不能调用,系统会报错static void OldMethod() { Console.WriteLine("旧方法"); }static void NewMethod() { Console.WriteLine("新方法"); } static void Main(string[] args) { OldMethod(); Console.ReadKey(); } }
转载地址:https://czhenya.blog.csdn.net/article/details/78002311 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月14日 07时07分13秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
没有设计能力,如何打造个人网站?
2019-04-30
微信公众号和小程序的深度流量玩法
2019-04-30
赋能表单数据,提升智能表单营销能力
2019-04-30
用它提升品牌力,【Design Lab】必用3大酷炫功能
2019-04-30
有了轻栈搭建小程序商城工具,小白也能零门槛开发自己的小程序商城了
2019-04-30
推广成本不菲?百度自然流量的硬核武器来啦
2019-04-30
时代发展趋势:电商+小程序
2019-04-30
没有网店经验的小商家开辟小程序商城之路
2019-04-30
商家巧用小程序推动新零售运营模式发展
2019-04-30
轻栈上线头条搜索配置,一键开启头条矩阵流量
2019-04-30
敲黑板,重点来了!轻栈免费小程序也有支付功能哦
2019-04-30
让人无法抗拒的小程序魅力值
2019-04-30
想要让自己的微信商城运营得更好,打造火爆的线上商城吗?
2019-04-30
又一电商杀手锏——区块链应用--交易印
2019-04-30
好好利用通过企业认证的百家号,又一波流量在来的路上
2019-04-30
微信公众号推文次数不受限的秘技
2019-04-30
轻栈送上免费注册支付宝小程序
2019-04-30
快速搭建小程序,实现线上引流获客
2019-04-30
爱用建站一键开启头条巨量流量
2019-04-30
这样玩小程序直播提升超2倍的转化
2019-04-30