利用反射来实现获取成员的指定特性(Attribute)信息
在开发过程中,我们经常需要自定义一些特性,来辅助我们完成对对象或者枚举进行管理。我们需要知道如何获取对象使用的特性信息。
以下举个学习用的例子。
我们自定义一个特性类,这个特性设置在一个数据段内是否执行使用这个特性的方法,特性如下
[AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
public class ExcuceAttribute : Attribute
{
public ExcuceAttribute(bool isExcuce, int minSeed, int maxSeed)
{
IsExcuce = isExcuce;
MinSeed = minSeed;
MaxSeed = maxSeed;
} public bool IsExcuce { get; set; } public int MaxSeed { get; set; } public int MinSeed { get; set; }
}
然后有个方法使用这个特性
public class ExcuteClass
{
[Excuce(true, 1, 10)]
public void Job()
{ }
}
接下来是管理方法的编写,即是我们说的利用反射来获取自定义特性的信息
public void Invoke()
{
var eClass = new ExcuteClass();
var type = eClass.GetType(); var methods = type.GetMethods().ToList();
var seed = 7; methods.ForEach(m =>
{
var attributes = m.GetCustomAttributes(typeof(ExcuceAttribute), false);
attributes.ToList().ForEach(a =>
{
if (a.GetType() == typeof(ExcuceAttribute))
{
var obj = (ExcuceAttribute)a;
if (obj.IsExcuce && seed >= obj.MinSeed && seed <= obj.MaxSeed)
{
m.Invoke(eClass, null);
}
}
});
});
}
利用反射来实现获取成员的指定特性(Attribute)信息的更多相关文章
- C# 利用反射动态调用类成员
		用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): publicobject InvokeMember( string name, ... 
- C#利用反射机制,获取实例的属性和属性值
		C#利用反射,遍历获得一个类的所有属性名,以及该类的实例的所有属性的值 对应某个类的实例化的对象tc, 遍历获取所有属性(子成员)的方法(采用反射): Type t = tc.GetType();// ... 
- c#反射机制学习和利用反射获取类型信息
		反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ... 
- .NET C#利用反射获取类文件以及其中的方法&属性 并获取类及方法上的特性
		了解C#特性类并声明我们自己的特性类[AttributeTest]代码如下 using System; namespace AttributeTest { /* 特性说明 特性本质是一个继承和使用了系 ... 
- Atitit利用反射获取子类 集合 以及继承树
		Atitit利用反射获取子类 集合 以及继承树 想从父类往下找子类的确是不可能的,要知道只要类不是final的话谁都有继承它的自由不需要事前通知父类. Eclipse实现不是重父类开始找而是重子类往回 ... 
- java 27 - 4  反射之 通过反射获取成员变量并使用
		类Field: 提供有关类或接口的单个字段的信息,以及对它的动态访问权限. A:获得类的成员变量 数组: 1.getFields(公共类的) 2.getDeclaredFields(所有类型的) B: ... 
- Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用
		一.反射获取成员变量并且使用: 1.获取字节码文件对象: Class c = Class.forName("cn.itcast_01.Person"); 2.使用无 ... 
- Android(java)学习笔记50:通过反射获取成员变量和成员方法并且使用
		1. 反射获取成员变量并且使用: (1)获取字节码文件对象: Class c = Class.forName("cn.itcast_01.Person"); (2) ... 
- java 中利用反射机制获取和设置实体类的属性值
		摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ... 
随机推荐
- dotweb——go语言的一个微型web框架(二)启动dotweb
			以上的代码截图表示启动一个dotweb服务,在浏览器里输入127.0.0.1:8080,将会得到一个"index"的页面. app := dotweb.New() dotweb.N ... 
- 日期格式化,moment.js
			官方文档:http://momentjs.com/; 使用方法:moment(data).format("YYYY-MM-DD");//data为日期的字符串形式 moment() ... 
- vue-router2.0动态路由获取参数
			一下demo演示2.0中的vue-router是如何获取到不同参数的,并在地址栏中匹配不同的信息 <!DOCTYPE html> <html lang="en"& ... 
- web console实现
			一.效果图 二.实现 web console是基于websocket实现的. 以上做的效果嵌入项目中,因为项目本身是angular1的项目,所以console整体封装成一个angualr modul ... 
- xml学习_上篇
			xml简介: XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. xml小示例: /************************ ... 
- 如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas
			前言 软件系统中总是希望做到松耦合,项目的组织形式也是一样,本篇文章将介绍在ASP.NET CORE MVC中怎么样将Controller与主网站项目进行分离,并且对Areas进行支持. 实践 1.新 ... 
- JDK8-十大新特性-附demo
			JDK原计划17年上半年就发版,但未成功发版.才发现JDK8的特性还没总结过,特此总结. 一.十大特性. 1.Lambda表达式 2.Stream函数式操作流元素集合 3.接口新增:默认方法与静态方法 ... 
- 细谈UITabBarController
			1.简述 UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,UITabB ... 
- MySQL数据库主从同步配置
			主服务器必须打开开二进制日志. 主要是修改配置文件 , 一般在 linux 下安装的 mysql 配置文件是 my.cnf, 在 windwos 下是 my.ini, 修改主服务器配置文件 serve ... 
- Java排序算法之希尔(Shell)排序
			基本思想: 希尔排序就是对直接插入排序的一个优化.现在有一个array,希尔排序就是设定一个增量incrementNum(0<incrementNum<array.length).先从ar ... 
