📅  最后修改于: 2023-12-03 14:39:45.065000             🧑  作者: Mango
在 C# 中,我们可以通过自定义属性来为程序中的各种元素(类、方法、属性等)添加元数据,以方便后续的处理(如反射)。本文将介绍如何从属性中获取自定义属性,并展示一些示例代码。
获取自定义属性需要使用反射机制,具体步骤如下:
Type
对象。PropertyInfo
对象。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# 中,我们可以使用自定义属性为程序中的各种元素添加元数据,并通过反射机制获取这些元数据,并进行后续的处理。本文介绍了如何从属性中获取自定义属性,并给出了一个示例代码。