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现阶段,我们学到过。当时我认为这是一个事……

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

DIY.NETORM帧——技术储备(1)Attribute的更多相关文章

  1. DIY.NETORM框架——总体分析

    一.故事 近些年一直开发MIS系统,用过PB,VB,C#  .如今学了半年的java,早先听人说,.NET和 java一直就是互相借鉴.一起升级.都是为了让程序开发趋于简单,高校,而这不可避免就肯定用 ...

  2. Lucene.net站内搜索—4、搜索引擎第一版技术储备(简单介绍Log4Net、生产者消费者模式)

    目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...

  3. [ionic开源项目教程] - 第1讲 前言,技术储备,环境搭建,常用命令

    前言 这是一个系列文章,将持续更新到项目完结,从环境搭建开始讲解,包括实战开发中遇到的各种问题的解决方案,都将毫无保留的分享给大家. 技术储备 开始本项目之前,请确保自己对以下技术点都有所了解. ht ...

  4. Web---myAjax(自己写底层)-隐藏帧技术

    讲解网站一般都有的一个功能,就是注册时候的,实现验证用户名是否存在的功能. 源代码演示: reg.jsp: <%@ page language="java" import=& ...

  5. atitit.团队建设--要不要招技术储备人才的问题

    atitit.团队建设--要不要招技术储备人才的问题 1.      人才的储备和招聘. 1 1.1.   模式1.     养兵千日,用兵一时 1 1.2. 模式2,暂时抱佛脚,也不多招一个人 1 ...

  6. 关于学习Vue的前置工作/技术储备

    关于学习Vue的前置工作/技术储备 1.GitBatch 2.Sublime Text 3.Node-----npm 命令 本人用的idea GitBatch: GitBatch是一个可以编写shel ...

  7. XXXX公司微课大赛技术储备

    XXXX公司微课大赛技术储备 发短信验证 http://www.yunpian.com/ 发邮件 http://sendcloud.sohu.com/ flash头像上传组件 http://www.h ...

  8. Timewarp 一种生成当中帧技术,异步时间扭曲(Asynchronous Timewarp)

    翻译: https://www.oculus.com/blog/asynchronous-timewarp/    异步时间扭曲(Asynchronous Timewarp 时间扭曲,即调整时长) 关 ...

  9. WebGL简易教程(十三):帧缓存对象(离屏渲染)

    目录 1. 概述 2. 示例 2.1. 着色器部分 2.2. 初始化/准备工作 2.2.1. 着色器切换 2.2.2. 帧缓冲区 2.3. 绘制函数 2.3.1. 初始化顶点数组 2.3.2. 传递非 ...

随机推荐

  1. vc2008构建和使用libcurl静态库

    1>下载CURL源代码curl-7.26.0.zip 2>用VC2008/2005打开工程curl-7.26.0\lib\libcurl.vcproj,转换下工程并构建,可以直接编译成功! ...

  2. HDU 3549 Flow Problem(有向边网络流)

    九野的博客,转载请注明出处 :http://blog.csdn.net/acmmmm/article/details/11221561 题意:T个测试数据 下面n,m表示n个点m条有向带权边 m条边 ...

  3. poj 1743 男人八题之后缀数组求最长不可重叠最长重复子串

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 14874   Accepted: 5118 De ...

  4. GMM的EM算法

    在聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut一文中我们给出了GMM算法的基本模型与似然函数,在EM算法原理中对EM算法的实现与收敛性证明 ...

  5. ArcGIS多面体(multipatch)解析——引

    多面体(multipatch)结构在ArcGIS数据结构中是与点.线.面平行的一种数据结构,对于ArcGIS三维来说是一个很核心的结构,有了它,ArcGIS平台才可以灵活的描述规则和不规则的三维实体. ...

  6. hdu4521 小明系列的问题——小明序列(LIS变种 (段树+单点更新解决方案))

    链接: huangjing 题目:中文题目 思路: 1:这个题目假设去掉那个距离大于d的条件,那么必定是一个普通的LIS.可是加上那个条件后就变得复杂了.我用的线段树的解法. . .就是採用延迟更新的 ...

  7. Android 布局之LinearLayout 子控件weight权重的作用详析(转)

    关于Android开发中的LinearLayout子控件权重android:layout_weigh参数的作用,网上关于其用法有两种截然相反说法: 说法一:值越大,重要性越高,所占用的空间越大: 说法 ...

  8. 使用AndroidFrameworks开发和应用隐藏类 or Android使用自定义framework开发与应用

    Android眼下代表系统的开源手机操作系统已经更新到4.0.3版本号.由于其开源特性.使得操作系统本身所具有的最大的灵活性,但同时也引起的版本号的多样性,市场上出现的是手机厂商或ROM.可是怎样开发 ...

  9. BCM wifi分析

    一个:载入中wifi驱动模块 在hardware/libhardware_legacy/wifi/wifi.c调用函数 insmod(DRIVER_MODULE_PATH, DRIVER_MODULE ...

  10. Cocos2d-x Tiled地图编辑器(一)基本使用

    Tiled地图编辑器支持普通视角地图和45度角地图, 它生成的地图数据文件cocos2d-x完美的支持,Tiled地图编辑器是一个以普通使用为目标地图编辑器,它使用简单而且能够轻松地在不同的游戏引擎中 ...