关闭

Attribute(特性)

标签: .net
1922人阅读 评论(0) 收藏 举报
分类:

一向都觉得.NET的Attribute好神秘。一个方框框住的东西,置身于类、方法的头部,本身不在类或方法里面,但又会起作用,有时作用还很大,仿佛充满了魔力。简直给人一种无冕之王,幕后之黑手的感觉!

某十几年前已经开始接触C#,却对这个Attribute充满了迷茫。原因固然跟本人懒惰成性,不思进取,从业十几年,不是“有十几年工作经验,而是一条经验用了十几年”有关,也因为我当初自学的C#教材,什么宝典,什么从入门到精通之类,都没有介绍这个东东。就算查,也不知道它叫啥。你看看:
这里写图片描述

后来有人叫它:特性。总算知道了。

其实Attribute本身就是一个类。换言之,它就是代码。虽然没有放在类、方法里面,只放在头部,好像就是个说明而已,但其实,它们本身就是代码的一部分。编译器、CLR能够识别、并处理它们,做出不同的反应,所以说到底,这有啥好神秘的?我只是脑筋转不过弯来罢了。

就是在我们自己的代码里面,也可以直接使用的:

        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            bool hasPermission = true;
            var permissionAttributes = filterContext
                .ActionDescriptor
                .GetCustomAttributes(typeof(PermissionAttribute), false)
                .Cast<PermissionAttribute>();
            if (permissionAttributes == null || permissionAttributes.Count() == 0)
            {//如果action没有指定权限,则继承controller的指定
                permissionAttributes = filterContext
                    .ActionDescriptor
                    .ControllerDescriptor
                    .GetCustomAttributes(typeof(PermissionAttribute), false)
                    .Cast<PermissionAttribute>();
            }
        }

所谓的PermissionAttribute,是自己写的一个跟权限有关的特性

public class PermissionAttribute : FilterAttribute, IActionFilter
    {
        public List<int> Permissions { get; set; }

        public PermissionAttribute(params int[] parameters)
        {
            Permissions = parameters.ToList();
        }
    }

可以用在action或controller上

        [Permission((int)EnumBusinessPermission.DictionaryAdmin)]
        public ActionResult Create()
        {
            SysField model = new SysField();
            return View("Edit", model);
        }
0
1
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

特性的简单使用(Attribute)

using System; using System.Reflection; //特性使用 namespace CsDev { public class TransactionableAtt...
  • u013384702
  • u013384702
  • 2014-02-17 12:10
  • 447

C# 特性(Attribute)入门

By sadaf alvi 翻译:cppbug (itwizard@163.com)  绪论  特性(Attributes)是一种崭新的声明性信息。我们不仅可以通过特性来定义设计层面的信息...
  • natsu1211
  • natsu1211
  • 2014-06-25 23:10
  • 735

【C#语法】类和方法的特性Attribute

一、引言                 今天,我们来聊一下C#中的特性Attribute。何为特性Attribute?我们先看一个特性的使用例子,我们定义了一个Human类,但是由于某种原因该类不再...
  • lzhui1987
  • lzhui1987
  • 2017-07-03 20:28
  • 365

C# 高级特性(二)Attribute和反射

使用Attribute的时候大多需要用到反射,所以放在一起。 Attribute: 我的理解是,它可以给你的类、方法、字段等添加一些描述性语言,在运行期间又可以通过反射的方法获取它的内容。 在编...
  • lyn5284767
  • lyn5284767
  • 2016-08-25 11:40
  • 1517

C# 入门(19) 反射(reflection)和特性(attribute)

C#的反射和特性
  • l773575310
  • l773575310
  • 2017-05-04 10:59
  • 409

利用Attribute标记方法的调用权限

假设我们有这么一个标记来说明操作的权限: /// /// 声明权限的标记 /// [AttributeUsage(AttributeTargets.Method)] ...
  • lee576
  • lee576
  • 2014-07-15 10:17
  • 2327

Unity游戏开发——C#特性Attribute与自动化

这篇文章主要讲一下C#里面Attribute的使用方法及其可能的应用场景。比如你把玩家的血量、攻击、防御等属性写到枚举里面。然后界面可能有很多地方要根据这个枚举获取属性的描述文本。比如你做网络框架的时...
  • kakashi8841
  • kakashi8841
  • 2014-12-12 14:40
  • 13079

ASP.NET MVC5 新特性:Attribute路由使用详解

1、什么是Attribute路由?怎么样启用Attribute路由?   微软在 ASP.NET MVC5 中引入了一种新型路由:Attribute路由,顾名思义,Attribute路由是通过Att...
  • cauchy8389
  • cauchy8389
  • 2014-04-04 15:03
  • 28112

C# 中自定义Attribute值的获取与优化

C#自定义Attribute值的获取是开发中会经常用到的,一般我们的做法也就是用反射进行获取的,代码也不是很复杂。 1、首先有如下自定义的Attribute [AttributeUsage(A...
  • hegx2001
  • hegx2001
  • 2015-12-18 15:46
  • 7218

C#当中利用Attribute实现简易AOP

首先看一段简单的代码: public partial class Form1 : Form { public Form1() { InitializeComp...
  • xiaogui340
  • xiaogui340
  • 2013-08-30 15:52
  • 7426
    个人资料
    • 访问:2458946次
    • 积分:33431
    • 等级:
    • 排名:第161名
    • 原创:910篇
    • 转载:0篇
    • 译文:0篇
    • 评论:626条
    文章分类
    最新评论