Attribute.GetCustomAttributes和MemberInfo.GetCustomAttributes可以互换使用,因为MemberInfo是Attribute的父类。
下面是一个示例代码,演示了如何互换使用这两个方法:
using System;
using System.Reflection;
[AttributeUsage(AttributeTargets.Class)]
public class MyAttribute : Attribute
{
public MyAttribute(string value)
{
this.Value = value;
}
public string Value { get; set; }
}
[MyAttribute("Hello")]
public class MyClass
{
public string MyProperty { get; set; }
}
class Program
{
static void Main(string[] args)
{
// 使用Attribute.GetCustomAttributes获取MyClass的所有自定义属性
Attribute[] attributes1 = Attribute.GetCustomAttributes(typeof(MyClass));
foreach (Attribute attribute in attributes1)
{
if (attribute is MyAttribute)
{
MyAttribute myAttribute = (MyAttribute)attribute;
Console.WriteLine(myAttribute.Value);
}
}
Console.WriteLine("------------------");
// 使用MemberInfo.GetCustomAttributes获取MyClass的所有自定义属性
MemberInfo memberInfo = typeof(MyClass);
Attribute[] attributes2 = Attribute.GetCustomAttributes(memberInfo);
foreach (Attribute attribute in attributes2)
{
if (attribute is MyAttribute)
{
MyAttribute myAttribute = (MyAttribute)attribute;
Console.WriteLine(myAttribute.Value);
}
}
}
}
输出结果为:
Hello
------------------
Hello
以上代码示例中,我们定义了一个自定义属性MyAttribute
,然后给MyClass
类应用了这个自定义属性。接下来,我们使用Attribute.GetCustomAttributes
方法和MemberInfo.GetCustomAttributes
方法来获取MyClass
类的自定义属性,并将其值打印出来。可以看到,两种方法都能够正确获取到自定义属性的值。