Attribute的一个列子
其实在博客中也写过这个东西,也介绍过它的原理,原理很简单,就是在运行的时候通过反射拦截获取一些信息,但是我在写程序的时候几乎没用过,可能是自己接触的还不够多,也许是因为自己接触的功能不算复杂往往几句代码就可以搞定,用这个实在没有必要,跟朋友讨论,这个在框架的时候用的多,看来自己还真没到这个说平。这个词一般翻译为特性,以区别property,虽然从英文翻译过来的意思和后者是一样的,但是在这里还是区分下。实际上,Attribute可以有很多用处,比如说,你可以在某个方法上做标记看有没有权限调用,或者在某个属性上标记,看要如何校验。例如(实在习惯用var关键字了,下面的代码都用var了,还有Linq): 假设我们有这么一个标记来说明操作的权限:/// <summary>/// 声明权限的标记/// </summary> [AttributeUsage(AttributeTargets.Method)]public class PermissonAttribute : Attribute{public string Role { get; set; }public PermissonAttribute(string role){this.Role = role;}public PermissonAttribute(){}}有一个操作类应用了该标记:/// <summary>/// 文件操作类/// </summary>public class FileOperations{/// <summary>/// 任何人都可以调用Read/// </summary>[Permisson("Anyone")]public void Read(){}/// <summary>/// 只有文件所有者才能Write/// </summary>[Permisson("Owner")]public void Write(){}} 然后我们写一个工具类来检查操作权限/// <summary>/// 调用操作的工具类/// </summary>public static class OperationInvoker{public static void Invoke(object target, string role, string operationName, object[] parameters){var targetType = target.GetType();var methodInfo = targetType.GetMethod(operationName);if (methodInfo.IsDefined(typeof(PermissonAttribute), false)){// 读取出所有权限相关的标记var permissons = methodInfo.GetCustomAttributes(typeof(PermissonAttribute), false).OfType<PermissonAttribute>();// 如果其中有满足的权限if (permissons.Any(p => p.Role == role)){methodInfo.Invoke(target, parameters);}else{throw new Exception(string.Format("角色{0}没有访问操作{1}的权限!", role, operationName));}}}}最后,在使用的时候: var role = "Anyone"; var opertion = new FileOperations(); // 可以正常调用Read OperationInvoker.Invoke(operation, "Read", null); // 但是不能调用Write OperationInvoker.Invoke(operation, "Write", null);
Attribute的一个列子相关推荐
- 关于Java多态的认识和一个列子
文章转自 http://www.cnblogs.com/jack204/archive/2012/10/29/2745150.html, 感谢原作者 以及这里http://www.importnew. ...
- restlet_JAX-RS 的一个列子
最近看了一个同事些的项目 用到了JAX-RS 这个来做实现数据接口.看了下不是很懂 特意搜了些列子学学 我的列子也是从网上下载的 代码简介 完整 可直接运行真的蛮好的. http://downl ...
- 一个列子演示java中软引用的回收时机
示例代码如下: import java.lang.ref.SoftReference;/*** 软引用比弱引用强,如果一个对象只有软引用,那么当堆空间不足时候,才会被回收* 该类用于演示软引用的这一性 ...
- 一个列子让你弄懂SpringBoot实现后台框架的搭建
首先项目搭建 首先项目基于idea来写的,下面演示项目搭建d 首先项目搭建 记住Application文件一定要在根目录底下不然程序会运行不起来的 然后开始新建包. constant :常量包 ...
- 一个列子看懂 隐藏(hide)
前提: 子类和父类之间 一个类的属性.静态方法或者内部类可以分别隐藏(hide)在其超类中可以访问到的具有相同名字(对方法而言就是相同的签名)的所有属性.静态方法或者内部类.上述成员被隐藏后,将组织其 ...
- 覆盖与隐藏的区别 (一个列子)
例子: class Student1{ int math = 70; static int computer = 80; int english = 65; public Student1() ...
- 一个列子演示java中弱引用的回收时机
示例代码如下 import java.lang.ref.WeakReference;/*** * 弱引用比软引用还要弱,在系统GC时候,只要发现弱引用,不管系统堆空间使用情况如何,都会将对象回收* 该 ...
- Attribute在.net编程中的应用
作者:niwalker 出处:csdn SqlCommandGenerator类的设计 SqlCommandGEnerator类的设计思路就是通过反射得到方法的参数,使用被SqlComma ...
- Python中怎么判定一个List里面的元素是不是全部一样
假设我们有一个List,怎么判断这个list里面的元素是不是全部都一样,我们可以用到set() 集合这个元素来操作 看一个列子 In [1]: l=[1,1,1,1]In [2]: len(set(l ...
最新文章
- 都优秀!两位硕士都发一作Nature,之后选择却截然不同!
- sklearn.preprocessing下的数据标准化(scale、MinMaxScaler)
- 如何让低版本IE浏览器支持HTML5和CSS3
- RecyclerView android:layout_width=match_parent无效
- Xcode7 真机免证书调试Cocos2D游戏
- 计算机网络作业答案吴,中国大学《2020春季课程-计算机网络应用吴迪》答案全部2020高校邦《羽毛球》作业题库答案...
- 利用selenium webdriver点击alert提示框
- MIP 脚本域名地址变更公告
- Android系统(274)---如何预置APK
- mysql 触发器执行失败_mysql-Mysql数据库触发器执行不成功
- 批量获取/打开链接 - 实践
- 红外图像和热成像图像
- 【C语言实现】goto语句实现简易关机程序
- hdu5745 La Vie en rose【dp+bitset优化】
- python模拟登录163邮箱_python selenium模拟登陆163邮箱。
- 解决无法解析服务器DNS地址
- Unity中的GUI编程
- CoreOS Fest 系列之第二篇: Systemd、Go、Calico、Sysdig
- C语言进阶——地址和指针
- 选举投票制作制作一个投票链接制作步骤在线制作投票