聊一聊C#创建自定义特性

开发 后端
特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。

[[390099]]

本文转载自微信公众号「后端Q」,作者conan。转载本文请联系后端Q公众号。

概述

特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。要设计你自己的自定义特性,无需掌握许多新的概念。 如果你熟悉面向对象的编程,并且知道如何设计类,那么你已经具备大部分所需知识。 自定义特性本质上是直接或间接派生自 System.Attribute的传统类。 与传统类一样,自定义特性包含用于存储和检索数据的方法。

实现方式

1、声明自定义特性,一个新的自定义特性应派生自 System.Attribute 类。

// 一个自定义特性 BugFix 被赋给类及其成员 
[AttributeUsage(AttributeTargets.Class | 
AttributeTargets.Constructor | 
AttributeTargets.Field | 
AttributeTargets.Method | 
AttributeTargets.Property, 
AllowMultiple = true)] 
 
public class DeBugInfo : System.Attribute 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

2、构建自定义特性,让我们构建一个名为 DeBugInfo 的自定义特性,该特性将存储调试程序获得的信息。

// 一个自定义特性 BugFix 被赋给类及其成员 
[AttributeUsage(AttributeTargets.Class | 
AttributeTargets.Constructor | 
AttributeTargets.Field | 
AttributeTargets.Method | 
AttributeTargets.Property, 
AllowMultiple = true)] 
 
public class DeBugInfo : System.Attribute 

  private int bugNo; 
  private string developer; 
  private string lastReview; 
  public string message; 
 
  public DeBugInfo(int bg, string dev, string d) 

      this.bugNo = bg; 
      this.developer = dev; 
      this.lastReview = d; 
  } 
 
  public int BugNo 
  { 
      get 
      { 
          return bugNo; 
      } 
  } 
  public string Developer 
  { 
      get 
      { 
          return developer; 
      } 
  } 
  public string LastReview 
  { 
      get 
      { 
          return lastReview; 
      } 
  } 
  public string Message 
  { 
      get 
      { 
          return message; 
      } 
      set 
      { 
          message = value; 
      } 
  } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.

3、应用自定义特性

[DeBugInfo(45, "Zara Ali""12/8/2012", Message = "Return type mismatch")] 
[DeBugInfo(49, "Nuha Ali""10/10/2012", Message = "Unused variable")] 
class Rectangle 

  // 成员变量 
  protected double length; 
  protected double width; 
  public Rectangle(double l, double w) 
  { 
      length = l; 
      width = w; 
  } 
  [DeBugInfo(55, "Zara Ali""19/10/2012"
  Message = "Return type mismatch")] 
  public double GetArea() 
  { 
      return length * width; 
  } 
  [DeBugInfo(56, "Zara Ali""19/10/2012")] 
  public void Display() 
  { 
      Console.WriteLine("Length: {0}", length); 
      Console.WriteLine("Width: {0}", width); 
      Console.WriteLine("Area: {0}", GetArea()); 
  } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.

 

责任编辑:武晓燕 来源: 后端Q
相关推荐

2022-10-09 08:35:06

SQL自定义排序

2009-08-04 08:58:01

C#自定义特性

2009-08-04 09:09:51

C#反射

2024-12-26 10:05:58

C#前台线程

2024-08-26 14:46:57

2020-10-30 07:11:31

C 语言编程

2024-06-28 12:47:29

C#弱引用底层

2022-08-30 07:39:57

C++namespace隔离

2020-10-23 07:00:00

C++函数

2021-06-17 06:52:37

C#自定义异常

2024-09-11 14:46:48

C#旋转按钮

2023-12-07 07:26:04

2022-11-02 08:51:01

2024-01-02 13:26:39

TLSC#线程

2025-01-10 08:15:22

C#异步底层

2021-05-12 18:02:23

方法创建线程

2020-03-31 10:08:15

零信任安全软件

2023-09-22 17:36:37

2020-05-22 08:16:07

PONGPONXG-PON

2021-01-28 22:31:33

分组密码算法
点赞
收藏

51CTO技术栈公众号