zoukankan      html  css  js  c++  java
  • 自定义特性的简单用法

    特性简述:

      c#中的特性,是给编码中的代码添加一些数据,也可以理解为说明。例如:给类添加个等级信息,给方法添加个编码日期等等。它必须继承自System.Attribute类或其派生类。

      有些特性类是具备触发条件的,例如ASP.NET MVC Framework中Action Filter中的AuthorizeAttribute,它就有自己的触发条件,可以酌情重写以下方法。

        OnActionExecuting – 在controller action执行之前调用

        OnActionExecuted – 在controller action执行之后调用
        OnResultExecuting – 在controller action result执行之前调用
        OnResultExecuted – 在controller action result执行之后调用

      这东西,在代码被框架调用时,很有用,平时编程意义不大。

    例:

      编写一个特性TestA:

    1 class TestA:Attribute
    2     {
    3         int power;
    4         public int Power
    5         {
    6             get { return power; }
    7             set { power = value; }
    8         }
    9     }

    该特性仅仅设定一个整数,表示一段代码的权重(YY的)

    编写两个类(其实内容一样),分别给出不同的权重:

    1 [TestA(Power=100)]
    2     class TestClass1
    3     {
    4         public string Name { get; set; }
    5         public int Age { get; set; }
    6     }

    还有一个

    [TestA(Power = 50)]
        class TestClass2
        {
            public string Name { get; set; }
            public int Age { get; set; }
        }

    在主方法中可以取出这两个类的权重:

     1 static void Main(string[] args)
     2         {
     3             var myclass1 = new TestClass1();
     4             var myclass2 = new TestClass2();
     5             var as1 = myclass1.GetType().GetCustomAttributes(typeof(TestA), false);
     6             var as2 = myclass2.GetType().GetCustomAttributes(typeof(TestA), false);
     7             Console.WriteLine(((TestA)as1[0]).Power);
     8             Console.WriteLine(((TestA)as2[0]).Power);
     9             Console.ReadKey();
    10         }

    运行结果:

     总结:例子看似没什么意义,但如果调用类的是框架,就可以根据特性做很多事情。作为普通程序员,对其有一定了解,至少有助于日后阅读代码。

  • 相关阅读:
    [ZJOI2011]营救皮卡丘
    TJOI2018Party
    HEOI2013SAO
    [BJOI2017]树的难题
    [HNOI2016]序列
    [SHOI2007]善意的投票
    CF802C Heidi and Library (hard)
    SPOJ DIVCNT2
    LOJ子序列
    BZOJ2882工艺
  • 原文地址:https://www.cnblogs.com/wanjinliu/p/12048247.html
Copyright © 2011-2022 走看看