Attribute(特性)
一向都觉得.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);
}
Attribute(特性)的更多相关文章
- .net学习之Attribute特性和EF关键知识点
一.Attribute特性/标签1.Attribute用来对类.属性.方法等标注额外的信息,贴一个标签简单的说,定制特性Attribute,本质上就是一个类,它为目标元素提供关联附加信息,并在运行时以 ...
- [C#]Attribute特性(3)——AttributeUsage特性和特性标识符
相关文章 [C#]Attribute特性 [C#]Attribute特性(2)——方法的特性及特性参数 AttributeUsage特性 除了可以定制自己的特性来注释常用的C#类型外,您可以用At ...
- [C#]Attribute特性(2)——方法的特性及特性参数
上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...
- 关于C# 中的Attribute 特性
关于C# 中的Attribute 特性 作者: 钢钢 来源: 博客园 发布时间: 2011-01-09 23:30 阅读: 13921 次 推荐: 12 原文链接 [收藏] 摘要:纠结地说 ...
- Attribute特性验证模型model
数据验证我们往往分为前台验证和后台验证,而我们的后台验证每到一个方法中就要去验证一次,这样的代码想想都难以维护,这篇我们这篇文章就是为了解决这样的问题.用attribute 这个特性来解决这样的问题 ...
- 如何在方法上贴上attribute(特性)捕捉方法的异常,来实现我们的需求
在方法上贴上attribute(特性)捕捉方法的异常,其实这么做也是为了在项目中不会大量使用try-cacth这样的语句,同时使我们的代码看起来更简洁,更直观,将逻辑业务分离使得后期维护方便.这里我们 ...
- .NET进阶篇03-Reflection反射、Attribute特性
知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂 内容目录 一.概述二.反射1.反射使用2.创建对象3.调用方法4.字段属性三.特性四.总结 一.概述 反射其实无处不在,我们用VS进行调试时候, ...
- Net中Attribute特性的高级使用及自定义验证实现
好久没写博客了,今天在百忙之中抽空来写篇文章,记录一下最近深入学习Attribute特性的笔记及心得.~~ 一.什么是特性? 特性(Attribute)是用于在运行时传递程序中各种元素(比如类.方法. ...
- C#基础系列——Attribute特性使用
前言:上篇 C#基础系列——反射笔记 总结了下反射得基础用法,这章我们来看看C#的另一个基础技术——特性. 1.什么是特性:就博主的理解,特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属 ...
- [C#]Attribute特性
简介 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联. 特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询特性. 特性具有以下属性: 特性可向程序中 ...
随机推荐
- KNN算法原理及实现
1.KNN算法概述 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.该方法在确定分类决策上只依据最邻近的一 ...
- qt 窗体间通信
利用qt的信号和槽,可以完成窗体间的通信,下面列出父子窗口利用信号和槽的相关代码. parent窗口: //parent.h #ifndef PARENT_H #define PARENT_H #in ...
- day22 01 初识面向对象----简单的人狗大战小游戏
day22 01 初识面向对象----简单的人狗大战小游戏 假设有一个简单的小游戏:人狗大战 怎样用代码去实现呢? 首先得有任何狗这两个角色,并且每个角色都有他们自己的一些属性,比如任务名字nam ...
- 杭电 2553 N皇后问题 (dfs)
Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上. 你的任务是,对于给定的N,求出有多少种合 ...
- 在Ubuntu 16.04 LTS上用g++和gcc编译C/C++代码错误提示“.../x86_64-linux-gnu/crt1.o: ELF section name out of range”
(有一些图片我是直接从个人的CSDN博客上复制来的) 最近一个多月来,我曾经多次尝试在Ubuntu 16.04 LTS上使用g++和gcc(这俩好像合起来叫MinGW?)来编译C/C++代码,但是在解 ...
- 【02】sass更新的方法
[02]更新的方法 gem install sass **
- STM32F407 NVIC 中断优先级管理 个人笔记
内嵌向量中断控制器:Nested Vectored Interrupt Controller (NVIC) 设置中断向量的优先级并使能. 响应优先级& 抢占优先级 抢占优先级:一个中断A还在处 ...
- python中的“坑”—持续更新
1.判断是否是回文 def is_back(s): ]==(s if s.strip() else False) print(is_back('上海自来水来自海上')) print(is_back(' ...
- POJ 3177 边双连通求连通量度的问题
这道题的总体思路就是找到连通量让它能够看作一个集合,然后找这个集合的度,度数为1的连通量为k,那么需要添加(k+1)/2条边才可以保证边双连通 这里因为一个连通量中low[]大小是相同的,所以我们用a ...
- windows下安装使用WGET
windows下安装WGET 1. 安装wget www.2cto.com 网址:http://gnuwin32.sourceforge.net/packages/wget.htm 下载 ...