• DIY.NETORM帧——技术储备(1)Attribute


    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>

    运行结果:

                                                                    


    结果分析:

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

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

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

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


    总结:

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

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


  • 相关阅读:
    mac下crontab定时任务使用
    javascript入门之算术乘法表
    原型模型
    Servlet开发
    工厂模式
    简单工厂模式
    Java设计模式之瞎BB的官话
    JavaBean技术
    软件设计模式之单例模式
    JSP页面请求与响应以及保存页面状态
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5037054.html
Copyright © 2020-2023  润新知