c# 反射和特性
来源:互联网 发布:网络优化工程师好学不 编辑:程序博客网 时间:2024/05/21 10:40
预定义类型(int long 和 string等),BCL中(Console, IEnumerable等)和程序员自定义类型,每种类型都有自己的成员和特性
BCL声明了一个叫做TYPE的抽象类,它被设计用来包含类型的特征
使用这个对象能让我们获取程序使用的对象信息
由于Type是抽象类,因此不能用它去实例化对象,关于Type的实例化对象
一个类中的方法和字段可以用Type显示出来,并且只能获取公有的字段
基本用法:
using System.Reflection;
FieldInfo[] array = type.GetFields();
foreach(var a in array)
{
Console.WriteLine(a); 获取所有公有字段
}
PropertyInfo[] array2 = type.GetProperties();
foreach(var info in array2)
{
Console.WriteLine(info.Name + " "); 获取所有公有属性
}
var array3 = type.GetMethods();
foreach(var method in array3)
{
Console.WriteLine(method.Name + " "); 获取所有公有函数
}
获取程序所在程序集:
Assembly类在System.Reflection命名空间中的定义.它允许访问给定程序集的元数据,它也包含了可以加载和执行的程序集
Myclass my = new Myclass();
Assembly assem = my.GetType().Assembly; //
Console.WriteLine(assem.FullName);
Type[] types = assem.GetTypes();
foreach(var type in types)
{
Console.WriteLine(type);
}
常用特性特性:
[obsolete]特性:标注这个方法已经过期了 建议使用新的方法
[Obsolete("这个方法已经过时了,建议使用新方法", true)] //加上true时 旧方法无法使用
static void OldMethod()
{
Console.WriteLine("This is an old method");
}
static void NewMethod()
{
Console.WriteLine("This is a new method");
}
[Condition]特性:必须定义了宏后才能被调用
using System.Diagnostics;
[Conditional("IsText")] //必须使用define来定义
static void NewMethod()
{
Console.WriteLine("This is a new method");
}
此时必须定义相应宏后才能使用该函数: #define IsText
调用者信息特性:
using System.Runtime.CompilerServices;
static void PrintOut(string str, [CallerFilePath]string filepath="", [CallerLineNumber]int LineNumber=0, [CallerMemberName]string MemberName="")
{
Console.WriteLine(filepath);
Console.WriteLine(LineNumber);
Console.WriteLine(MemberName);
}
此时输出的时 可执行文件位置, 代码行数 和所执行的函数名
跳过调试特性
[DebuggerStepThrough]
当一个函数100%正确时 调用该特性 则编译器不会进入该函数进行调试
[Serializable] 可以被序列化
表明一个字段可以被存储
- C#反射和特性
- c# 反射和特性
- C# 特性和反射
- C#特性和反射
- C#自定义特性和反射
- C# Assembly反射和特性
- C#中的特性和反射
- C# 反射和特性简介
- C#反射和特性的应用
- C#反射的特性
- C# 高级特性(二)Attribute和反射
- C#高级学习第四章反射和特性
- 定制特性和反射
- 24. 反射和特性
- 特性和反射
- LINQ、反射和特性
- C#反射(Reflection),特性(Atrribute)
- C#使用反射访问特性
- CodeForces-77E(计算几何+笛卡尔定理)
- solr最小集群的搭建
- vue vue-cli请求后台服务地址要注意点
- obs之libx264编码
- Linux笔记记录2 do_fork
- c# 反射和特性
- spring源码学习(五)Bean的加载(上)
- 关于访问自己电脑做服务器的相关IP知识
- 网络基本知识
- 全球国家的名称简体中文js对象 数组
- HDU 6128 Inverse of sum(推公式)
- -mysql-锁机制分为表级锁和行级锁
- java 计算两个字符串,或者Date相差的天数
- Mongo更新文档操作