zoukankan      html  css  js  c++  java
  • C# 特性 Attribute

      特性就是在类的类名称、属性、方法等上面加一个标记,使这些类、属性、方法等具有某些统一的特征,从而达到某些特殊的需要。举个小栗子:方法的异常捕捉,你是否还在某些可能出现异常的地方(例如数据库的操作、文件的操作等)经常使用try...catch。这个时候如果使用特性,就可 以大大减少方法里面的try...catch的使用。你只需要定义一个专门捕捉异常的特性类ExceptionExAttribute,然后给这个特性类 做些特殊处理,比如给它增加一个AOP拦截的功能(AOP拦截的方式很多,有兴趣可以搜搜看,园子里面很多类似的文章)。那么在可能出现异常的方法名称上 面加上一个[ExceptionEx]特性标签,这个方法就具有自动捕捉异常的能力。由此可见,特性可以减少统一需求的代码量.

    官方描述:

    特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。

    特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。.Net 框架提供了两种类型的特性:预定义特性和自定义特性

    1.预定义特性

    .Net 框架提供了三种预定义特性:

    ·AttributeUsage 起条件编译的作用,只有满足条件,才允许编译器对它的代码进行编译。一般在程序调试的时候使用。

    ·Conditional 描述了如何使用一个自定义特性类。它规定了特性可应用到的项目的类型。

    ·Obsolete 这个属性用来标记当前的方法已经被废弃,不再使用了。

    举个小栗子a如下:

     [Obsolete("Don't use OldMethod, use NewMethod instead", true)]
            static void OldMethod()
            {
                Console.WriteLine("It is the old method");
            }
            static void NewMethod()
            {
                Console.WriteLine("It is the new method");
            }
            static void Main(string[] args)
            {
                OldMethod();
                NewMethod();
                Console.ReadKey();
            }

    实际上是这样

    2.自定义特性

    特性是给目标类型添加描述性的元数据,它不会影响代码的运行。自定义特性的命名必须以Attribute结尾,如DefinedAttribute, 而在使用的时候可以直接用[Defined]或者[DefinedAttribute]

    小栗子b如下:

            public class DefinedAttribute:Attribute
            {
                private string Name { get; set; }
                private string Sex { get; set; }
                public DefinedAttribute(string _Name,string _Sex)
                {
                    this.Name = _Name;
                    this.Sex = _Sex;
                }
            }
            public class TestAttribute
            {
                [Defined("小明","")]
                [Defined("张伟","")]
                public void A()
                {
                    Console.WriteLine("111");
                }
            }
  • 相关阅读:
    第10组 Alpha冲刺 (2/6)
    第10组 Alpha冲刺 (1/6)
    第10组(72) 需求分析报告
    团队介绍及选题报告
    实验 7 : OpenDaylight 实验 —— Python 中的 REST API 调用
    第03组 Alpha冲刺 总结
    第03组 Alpha冲刺 (6/6)
    第03组 Alpha冲刺 (5/6)
    第03组 Alpha冲刺 (4/6)
    第03组 Alpha冲刺 (3/6)
  • 原文地址:https://www.cnblogs.com/miaoying/p/5022253.html
Copyright © 2011-2022 走看看