C#特性
目录[*]C#特性
[*]
[*]1. 概括
[*]2. 语法
[*]定义特性类
[*]应用特性
[*]获取特性
[*]3. 应用场景
[*]数据验证
[*]序列化和反序列化
[*]描述性元数据
[*]依赖注入
[*]单元测试
[*]权限控制
[*]AOP(面向切面编程)
[*]总结
[*]引用
C#特性
1. 概括
C#中的特性是一种用于向代码元素添加元数据的机制。它们允许程序员在代码中添加额外的信息,以影响程序的行为、编译过程或提供其他元数据。特性在编写现代C#代码时变得越来越常见,因为它们提供了一种优雅的方法来实现元数据驱动的开发。
特性分为:框架自带特性(如:、、、等)和自定义特性,都继承System.Attribute
2. 语法
定义特性类
以下是一个简单的特性类定义示例:
using System;
public class MyCustomAttribute : Attribute
{
public string Description { get; }
public MyCustomAttribute(string description)
{
Description = description;
}
}应用特性
将特性应用到代码元素上,可以使用以下语法:
public class MyClass
{
public void MyMethod()
{
}
}获取特性
要获取 MyCustom 特性,您可以使用反射来检查某个类型或成员上是否应用了该特性,并且访问该特性的属性。下面是如何获取 MyCustom 特性的示例代码:
// 获取 MyClass 类上的 MyCustom 特性
var classAttributes = typeof(MyClass).GetCustomAttributes(typeof(MyCustomAttribute), false);
foreach (MyCustomAttribute attribute in classAttributes)
{
Console.WriteLine($"MyClass类使用的MyCustom特性: {attribute.Description}");
}
// 获取 MyClass 类中 MyMethod 方法上的 MyCustom 特性
var methodInfo = typeof(MyClass).GetMethod("MyMethod");
var methodAttributes = methodInfo.GetCustomAttributes(typeof(MyCustomAttribute), false);
foreach (MyCustomAttribute attribute in methodAttributes)
{
Console.WriteLine($"MyMethod方法使用的MyCustom特性: {attribute.Description}");
}3. 应用场景
数据验证
在模型类上应用特性,以进行数据验证。例如,使用DataAnnotations中的特性来验证模型:
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}序列化和反序列化
控制对象的序列化和反序列化过程。例如,使用Json.NET中的特性来指定JSON属性的名称和行为:
public class Product
{
public string Name { get; set; }
public decimal Price { get; set; }
}描述性元数据
为枚举值或其他代码元素添加描述信息。例如,使用DescriptionAttribute为枚举值添加描述信息:
public enum Status
{
Pending,
Completed
}依赖注入
在依赖注入容器中标记服务以进行注入。例如,在ASP.NET Core中,使用特性标记需要注入的服务:
public class MyService
{
// This property will be injected by the DI container
}单元测试
在单元测试框架中使用特性标记测试方法。例如,在NUnit中使用特性标记测试方法:
public void TestMethod()
{
// Test code here
}权限控制
使用特性进行权限控制。例如,在ASP.NET Core中使用特性标记需要授权的控制器或操作方法:
public class AdminController : Controller
{
// Only accessible to users in the Admin role
}AOP(面向切面编程)
通过特性实现AOP,如日志记录、事务管理等。例如,在ASP.NET Core中使用ActionFilterAttribute来实现日志记录:
public class LogActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
// Log action execution start
base.OnActionExecuting(context);
}
public override void OnActionExecuted(ActionExecutedContext context)
{
// Log action execution end
base.OnActionExecuted(context);
}
}总结
C#中的特性为程序员提供了一种强大的元数据驱动机制,可以应用于多种场景。通过在代码中定义和使用特性,可以增强代码的可读性、可维护性,并提供灵活的方式来控制程序的行为和属性。
引用
[*]博文示例代码 https://github.com/chi8708/DotNetNote/blob/master/Note.Basic/11Attribute.cs
来源:https://www.cnblogs.com/chi8708/p/18200266
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页:
[1]