1、他是什么 ?

首先。我们当然Attribute它是一类,以下是一msdn文档对它的描写叙述: 

        公共语言执行时同意你加入类似keyword的描写叙述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,能够用来向执行时描写叙述你的代码,或者在程序执行的时候影响应用程序的行为。

事实上特别简单:Attribute就是一种“附着物”。就像超市商品上贴的标签。这些附着物的作用是为它们的附着体追加上一些额外的信息(这些信息就保存在附着物的体内),在商品上就像他的标签。是否參与特价等信息。

2、简单实例

实现:商场有N种商品,在特价商品柜台仅仅结账特价商品

类说明:

Commodity:商品类

Program:卖特价商品的前台

[ConditionalAttribute("special")]:特价标签

[ConditionalAttribute("normal")]:非特价标签

代码:

<span style="font-size:18px;">#define special  // C#的宏定义必须出如今全部代码之前。当前我们仅仅让special宏有效。(代表特价商品)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics; // 注意:这是为了使用包括在此名称空间中的ConditionalAttribute特性 namespace AttributeSample
{
/// <summary>
/// 商品类
/// </summary>
class Commodity
{
//特价商品*********************************************************************************
/// <summary>
/// 卖蛋糕
/// </summary>
[ConditionalAttribute("cake")] // Attribute名称的长记法
[ConditionalAttribute("special")]
public static void sellCake() { Console.WriteLine("卖出的是蛋糕, 特性为:special(特价)."); } /// <summary>
/// 卖饼干
/// </summary>
[Conditional("cookies")]
[Conditional("special")]
public static void sellCookies() { Console.WriteLine("卖出的是饼干, 特性为:special(特价)."); } //普通商品*********************************************************************************
/// <summary>
/// 卖牛奶
/// </summary>
[ConditionalAttribute("Milk")]
[ConditionalAttribute("normal")]
public static void sellMilk() { Console.WriteLine("卖出的是牛奶, 特性为:normal(普通)."); } /// <summary>
/// 卖面包
/// </summary>
[Conditional("Bread")] // Attribute名称的短记法
[Conditional("normal")]
public static void sellBread() { Console.WriteLine("卖出的是面包, 特性为:normal(普通)."); } } class Program
{
static void Main(string[] args)
{
//商品的商品都可在前台扫描
Commodity.sellCake();
Commodity.sellCookies();
Commodity.sellMilk();
Commodity.sellBread();
}
} }
</span>

运行结果:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHZzaHU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

结果分析:

为什么四个方法仅仅有两个运行了?大家再细致观察。发现仅仅有特性为special的方法被运行了。我们研究 ConditionalAttribute 发现,这个类的作用就是检測方法的特性。与预定义好的特性相符的才会运行,否则不运行。大家别想得太深奥,实际就是一个拦截器,Attribute 这时候的作用就体现了出来,他的影响程序运行的。所以他并非和凝视一样被编译器屏蔽,可是又和普通的属性不一样。我们通过一个直接的英语翻译来看看他们在语义上的差别:

Attribute:觉得…是; 把…归于; 把…品质归于某人; 觉得某事[物]属于某人[物];

property:特性,属性; 財产。地产; [戏]道具; 全部权;

就好像我们定义一个房子,里面有客厅,卧室,餐厅,这是属于这个房子的一部分。是property。而房子分为阴面和阳面。我们将客厅和餐厅打上标签是阳面。卧室是阴面,这是Attribute,他们都是为了描写叙述一事物,当我们写“class Commodity”这句代码时,实际系统给我们自己主动打上了一个Attribute:“class” !

总结:

当我们发现,有一个事物貌似和曾经接触的事物非常形似。怎么看怎么像一个东西,这时,我们的要做的就是临时将他们归为一类,降低我们的知识结点。而随着我们学习的深入。我们发现他貌似有些不同,我们才恍然大悟,他们是那么不一样,这个时候才知道,发明两种东西是为了解决两个问题!就像Attribute和property在uml现阶段,我们学到过。当时我认为这是一个事……

此示例不仅是一个技术储备也告诉自己,不要妄想事情开始变得明亮清晰的白色,学习和知识积累是出。但不出校门!

最新文章

  1. Mac OS X上搭建伪分布式CDH版本Hadoop开发环境
  2. 中国版的 Office 365
  3. PL/SQL连接Oracle客户端步骤
  4. 求解,ASP.Net MVC Redirect 无法跳转问题
  5. boost库学习之开篇
  6. 简述HP iLO中的几种开关机选项
  7. php+mysql非缓冲查询(如何循环大数组)
  8. JS 判断一个字符串是否包含在一个数组中
  9. Java线程间通信--生产者消费者
  10. MonkeyRunner 连续两次点击报“Error sending touch event”
  11. Reso | liunx下longeneQQ和搜狗拼音
  12. javascript 向上滚动
  13. Ubuntu通过使用PyCharm 进行调试 Odoo 8.0 可能出现的问题
  14. S0.1 【转】调色板
  15. ios-改变图片的尺寸
  16. Leetcode——58.最后一个单词的长度
  17. .Net开发工程师工具箱
  18. 【转】MVC中code first方式开发,数据库的生成与更新(Ef6)
  19. css设计技巧
  20. Linux中Postfix邮件WebMail配置(七)

热门文章

  1. 两个Hacker,专门Patch TObject
  2. 为VisualSVN Server增加在线修改用户密码的功能
  3. DotNetBar怎样控制窗口样式
  4. 上mongodb创建一些吸取的经验教训指数
  5. A股市场暴跌背后的三大元凶?
  6. SecureCRT 连接虚拟机Linux
  7. Java并发专题 带返回结果的批量任务运行 CompletionService ExecutorService.invokeAll
  8. .Net程序猿乐Android开发---(4)注册页面布局
  9. 使用SVN clang: error: linker command failed with exit code 1 (use -v to see invocation)
  10. 组队赛第二场:字符串哈希+DP