📅  最后修改于: 2023-12-03 15:00:17.302000             🧑  作者: Mango
在C#中,我们可以使用自定义属性来为代码中的类型、方法、属性等添加元数据信息,从而可以在运行时获取这些信息。本文将从以下几个方面来介绍C#中的自定义属性:
属性(Attribute)是作为程序元素的说明,对程序中的类型、方法、属性等进行描述和注释的一种手段。自定义属性(Custom Attribute)是使用C#编写的自定义的属性类型。它们以[System.Attribute]为基类,并以Attribute结尾的类。
在使用自定义属性时,需要注意以下几点:
定义自定义属性示例:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public class MyAttribute : System.Attribute
{
private string _name;
public MyAttribute(string name)
{
_name = name;
}
public string Name
{
get { return _name; }
}
}
上述代码定义了一个名为MyAttribute的自定义属性,它可以应用到类或方法上,并且有一个名称属性。当我们使用这个自定义属性时,可以通过命名参数或者位置参数来传递值。例如:
[My("TestClass")]
public class TestClass
{
[My("TestMethod")]
public void TestMethod()
{
// do something
}
}
在上述代码中,我们将MyAttribute应用到了TestClass类和TestMethod方法上,并为它们分别指定了名称,这些信息可以在程序运行时进行获取。
在C#中,有一些内置的特性,它们可以用来添加更丰富的元数据信息。
在运行时,我们可以使用反射机制来获取程序中的自定义属性。
获取类或方法的自定义属性示例:
Type type = typeof(TestClass);
MyAttribute attr = (MyAttribute)type.GetCustomAttributes(typeof(MyAttribute), false)[0];
Console.WriteLine("Class Name: {0}, Attribute Name: {1}", type.Name, attr.Name);
MethodInfo method = type.GetMethod("TestMethod");
attr = (MyAttribute)method.GetCustomAttributes(typeof(MyAttribute), false)[0];
Console.WriteLine("Method Name: {0}, Attribute Name: {1}", method.Name, attr.Name);
运行上述代码,我们可以得到如下输出结果:
Class Name: TestClass, Attribute Name: TestClass
Method Name: TestMethod, Attribute Name: TestMethod
在获取自定义属性时,我们需要使用typeof操作符来指定要获取的属性类型,并通过GetCustomAttributes方法来获取目标程序元素上的所有自定义属性。由于一个程序元素可以应用多个自定义属性,所以GetCustomAttributes方法返回的是一个数组。