C# 的Attribute(特性)用法
特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。
特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。
.Net 框架提供了两种类型的特性:预定义特性和自定义特性。
预定义的特性可以用来为代码添加元数据和指示编译器和运行时执行特定的操作。同时可以增加代码的功能和可读性。
以下是一些常见的 .NET 预定义特性:
[Serializable]
public class MyClass
{
// ...
}
[Obsolete("This method is deprecated. Use NewMethod instead.", true)]
public void OldMethod()
{
// ...
}
// #define DEBUG
[Conditional("DEBUG")]
public void DebugMethod()
{
// This method will only be included in the build if the DEBUG symbol is defined
// ...
}
[DllImport("user32.dll")]
public static extern int MessageBox(int hWnd, string text, string caption, int options);
[DataContract] 特性:用于指定一个类可以被序列化,并且可以控制序列化的方式。
[DataMember] 特性:用于指定一个属性或字段可以被序列化。
[WebMethod] 特性:用于标记一个方法可以被远程调用。
[Route] 特性:用于指定路由规则,定义 ASP.NET MVC 中的路由。
[HttpPost]、[HttpGet]、[HttpPut]、[HttpDelete] 特性:用于指定一个方法可以处理响应的 HTTP 请求类型。
[Authorize] 特性:用于标记一个方法或控制器需要进行授权才能访问。
C#中的自定义特性允许我们在代码中添加元数据,以提供有关程序元素(类、方法、属性等)的额外信息。下面是详细的步骤来创建并使用自定义特性。
声明自定义特性:
自定义特性需要继承System.Attribute
类并添加AttributeUsage
特性。AttributeUsage
特性用于指定特性可以应用的目标(类、方法、属性等)以及特性的使用方式(一次性或多次性)。
例如,我们可以创建一个自定义特性CustomAttribute
,如下所示:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class CustomAttribute : Attribute
{
// 添加自定义属性和方法
public string Name { get; set; }
public int Age { get; set; }
// 构造函数
public CustomAttribute(string name, int age)
{
Name = name;
Age = age;
}
}
构建自定义特性:
在自定义特性中,我们可以添加一些属性和构造函数以提供需要的元数据。在上面的示例中,我们添加了Name
和Age
属性,并定义了一个带有两个参数的构造函数。
在目标程序元素上应用自定义特性:
为了在目标程序元素上应用自定义特性,我们可以使用方括号[]
来将特性应用于类、方法、属性等。在方括号内,我们可以提供自定义特性的参数,就像在实例化类时提供构造函数参数一样。
[Custom("John", 30)]
public class MyClass
{
[Custom("Method 1", 25)]
[Custom("Method 2", 40)]
public void MyMethod()
{
// 方法实现逻辑
}
}
在上面的示例中,我们将Custom
特性应用于MyClass
类和MyMethod
方法,并为每个特性提供相应的参数。
通过反射访问特性:
我们可以使用反射来获取应用于程序元素的自定义特性,并访问特性的属性和方法。
var type = typeof(MyClass);
var classAttributes = type.GetCustomAttributes(typeof(CustomAttribute), true);
foreach (var attribute in classAttributes)
{
var customAttribute = (CustomAttribute)attribute;
Console.WriteLine($"Name: {customAttribute.Name}, Age: {customAttribute.Age}");
}
var method = type.GetMethod("MyMethod");
var methodAttributes = method.GetCustomAttributes(typeof(CustomAttribute), true);
foreach (var attribute in methodAttributes)
{
var customAttribute = (CustomAttribute)attribute;
Console.WriteLine($"Name: {customAttribute.Name}, Age: {customAttribute.Age}");
}
在上面的示例中,我们首先通过typeof
操作符获取MyClass
的类型,然后使用GetCustomAttributes
方法获取应用于类的特性。同样,我们通过反射获取MyMethod
方法,并获取应用于该方法的特性。最后,我们可以访问特性的属性和方法。
请注意,我们可以将typeof
和GetMethod
方法的参数替换为其他目标程序元素(如属性或字段),以获取应用于该元素的特性。
以上就是今天要讲的内容,本文简单介绍了的C# Attribute(特性)使用,预定义特性与自定义特性。