C# 特性AttributeUsage简介与使用教程

下面是针对“C# 特性AttributeUsage简介与使用教程”的详细讲解攻略:

C# 特性AttributeUsage简介与使用教程

简介

C# 中的特性是一种引用元数据的方式,可以给程序元素(如类、方法、属性等等)打上标记,为程序元素添加一些额外的信息。使用特性可以达到如下目的:

  • 指定在编译期和运行时应如何处理
  • 必须满足的条件
  • 定义程序元素如何处理

AttributeUsageAttribute 是 System.Attribute 层次结构的一个重要特性类。AttributeUsageAttribute 可以控制自定义特性如何使用。

AttributeUsageAttribute 类具有以下内容:

  • AttributeTargets。它是 AttributeTargets 枚举的值之一。枚举的成员定义了要在哪些元素上使用自定义特性。
  • AllowMultiple 属性。 允许特性在相同元素中指定多次。
  • Inherited 属性。指定特性是否可继承。

使用教程

首先,使用特性需要引入 System 命名空间。在此命名空间中,我们可以调用 Attribute 类,该类是所有特性类的父类。

使用属性

AttributeUsageAttribute 是属性,因此使用它时,应将其放在其他自定义特性类的声明之前。通过使用 AttributeUsageAttribute,我们可以指定特性的目标元素。例如:

using System;

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false,
                Inherited = true)]
public class MyClassAttribute : Attribute
{
    public string Author {get; set;}
    public double Version { get; set; }
    public MyClassAttribute(string author)
    {
        Author = author;
    }
}

在这个示例中,AttributeUsageAttribute 指定了特性的目标元素(类),并且该示例还定义了两个属性和一个构造函数。

使用特性

特性使用语法格式为在元素名称前加上方括号 [],括号中加上特性类的名称,并为该类提供必要的参数。例如:

using System;
[MyClass("John", Version = 1.0)]
public class TestClass
{
    // ...
}

在这里,使用 MyClassAttribute 特性来给 TestClass 类打上 “John” 这个作者的标记,该类的版本号为 1.0。

再看一个具体的示例,如下所示:

using System;
[AttributeUsage(AttributeTargets.Method)]
public class ParamCheckAttribute : Attribute {
    private string desc = "";
    public ParamType typeCheck = ParamType.STRING;
    public ParamCheckAttribute(string desc) {
        this.desc = desc;
    }
    public string Desc {
        get{ return desc;}
    }
} 

public class ConsoleHello {
    [ParamCheck("Name should not be empty!")] 
    private static void SayHello(string name) {
        if(name == null || name.Trim().Length == 0) {
            throw new ArgumentException("name");
        }
        Console.WriteLine($"Hello, {name}!");
    }
}

class Program {
    static void Main(string[] args) {
        ConsoleHello.SayHello("");
    }
}

上面的示例中,我们定义了一个 ParamCheckAttribute 特性类,该类被定义为只在方法中使用。定义了一个方法 SayHello(),并在该方法上使用 ParamCheck 特性。ParamCheck 特性有一个构造函数和一个属性。在程序中用 SayHello() 方法调用时,使用了一个空字符串,但是 ParamCheck 特性强制该参数不能为空,因此输出了一个“ArgumentException”异常。

在这个示例中,ParamCheck 特性被用于创建自己的类型检查规则。开发人员可以使用 ParamCheck 特性去标记他们的方法和属性,并为他们增加 “描述信息”和 “检查程序”。

总结

通过此篇文章,我们了解了 AttributeUsageAttribute 类的使用和作用,并做了两个相对实用的示例。在实际编程中又有什么好的想法呢?

营销型网站