📜  c# 从属性中获取自定义属性 - C# (1)

📅  最后修改于: 2023-12-03 14:39:45.065000             🧑  作者: Mango

C# 从属性中获取自定义属性

在 C# 中,我们可以通过自定义属性来为程序中的各种元素(类、方法、属性等)添加元数据,以方便后续的处理(如反射)。本文将介绍如何从属性中获取自定义属性,并展示一些示例代码。

获取自定义属性的基本方法

获取自定义属性需要使用反射机制,具体步骤如下:

  1. 获取目标类型的 Type 对象。
  2. 获取目标属性的 PropertyInfo 对象。
  3. 调用 PropertyInfo 对象的 GetCustomAttributes 方法,即可获得该属性的所有自定义属性。

下面是一个示例代码片段:

using System;
using System.Reflection;

public class MyClass
{
    [MyCustom("Hello World")]
    public string MyProperty { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var myClass = new MyClass();
        var propInfo = myClass.GetType().GetProperty("MyProperty");
        var customAttrs = propInfo.GetCustomAttributes(typeof(MyCustom), false);
        
        foreach (var attr in customAttrs)
        {
            if (attr is MyCustom)
            {
                var myCustomAttr = attr as MyCustom;
                Console.WriteLine(myCustomAttr.Message);
            }
        }
    }
}

[AttributeUsage(AttributeTargets.Property)]
public class MyCustomAttribute : Attribute
{
    public string Message { get; set; }

    public MyCustomAttribute(string message)
    {
        this.Message = message;
    }
}

在上面的代码中,我们定义了一个 MyClass 类,在其 MyProperty 属性上添加了一个自定义属性 MyCustomAttribute,并将其实例化时传入了一个 "Hello World" 的字符串作为参数。

Program 类中,我们首先创建了一个 MyClass 的实例,并获取 MyProperty 属性的 PropertyInfo 对象。然后,我们调用 GetCustomAttributes 方法,获取该属性的所有自定义属性,并使用 foreach 循环遍历它们。

在循环中,我们判断当前的属性是否为 MyCustomAttribute 类型的自定义属性,并将其转换为对应的实例对象。随后,我们输出其 Message 属性的值,即 "Hello World"

示例代码解释

在上述示例代码中,我们定义了一个自定义属性 MyCustomAttribute,它包含了一个 Message 属性。在 MyProperty 属性上,我们使用了 MyCustomAttribute 自定义属性,并传入了一个 "Hello World" 的字符串。

Program 类中,我们首先创建了一个 MyClass 的实例,并获取 MyProperty 属性的 PropertyInfo 对象。然后,我们调用 GetCustomAttributes 方法,获取该属性的所有自定义属性,并使用 foreach 循环遍历它们。

在循环中,我们判断当前的属性是否为 MyCustomAttribute 类型的自定义属性,并将其转换为对应的实例对象。随后,我们输出其 Message 属性的值,即 "Hello World"

结论

在 C# 中,我们可以使用自定义属性为程序中的各种元素添加元数据,并通过反射机制获取这些元数据,并进行后续的处理。本文介绍了如何从属性中获取自定义属性,并给出了一个示例代码。