免费建站还用学做网站吗,怎么让网站能被百度到,网站建设存在的问题有哪些,360网站名片怎么做前言
Attribute#xff08;特性#xff09;是一种用于为程序元素#xff08;如类、方法、属性等#xff09;提供元数据信息的方法。
特性是一种声明式的信息#xff0c;附加到程序元素上#xff0c;提供额外的数据用于描述和控制这些元素的行为。
在编译和运行时…
前言
Attribute特性是一种用于为程序元素如类、方法、属性等提供元数据信息的方法。
特性是一种声明式的信息附加到程序元素上提供额外的数据用于描述和控制这些元素的行为。
在编译和运行时都可以读取特性提供的信息对程序元素进行分析和操作。
特性通常用于实现以下功能 为代码添加元数据信息特性为元素类、方法、属性等添加额外的元数据信息描述其用途、状态、约束等。 控制编译行为特性可以用于控制编译器对代码的处理如指示编译器生成额外的代码、忽略特定警告等。 在运行时进行反射操作特性可以在运行时通过反射获取并读取用于实现一些动态的行为如配置加载、权限检查等。
C# 本身提供了一些常用的特性如 Serializable、Obsolete、Conditional 等同时我们也可以自定义特性来满足特定的需求。
特性的应用范围非常广泛在实际开发中经常用于标记和控制程序的行为提高代码的可读性和灵活性。
下面看看如何自定义特性 Attribute 并进行应用。
Step By Step 步骤 创建一个 ASP.NET Core Web Api 项目 创建一个 Attribute namespace AttributeSample
{// 说明此特性应用在属性上[AttributeUsage(AttributeTargets.Property)]public class TestAttribute: Attribute{public string DisplayName { get; set; }public int DisplayWidth { get; set; }public TestAttribute(string displayName, int displayWidth){DisplayName displayName;DisplayWidth displayWidth;}}
}创建一个类应用这个 Attribute public class Points
{[Test(站点名称, 100)]public string StationNo { get; set; }[Test(P1数据名称, 100)]public float TD_P1 { get; set; }[Test(P2数据名称, 100)]public float TD_P2 { get; set; }
}在控制器中读取 Points 类的属性的特性的值并应用 namespace AttributeSample.Controllers
{[ApiController][Route([controller])]public class WeatherForecastController : ControllerBase{private readonly ILoggerWeatherForecastController _logger;public WeatherForecastController(ILoggerWeatherForecastController logger){_logger logger;// 获取 Attribute 内容Type t typeof(Points);foreach (PropertyInfo pi in t.GetProperties()){string propertyName pi.Name;string displayName pi.GetCustomAttributeTestAttribute()?.DisplayName!;int displayWidth pi.GetCustomAttributeTestAttribute().DisplayWidth;// 读取类属性的特性值之后可以进行一些操作这里是打印出来_logger.LogInformation(属性名称 propertyName 显示名称 displayName 显示宽度 displayWidth);}}......}总结
Attrbiute 本身只是 “标签”脱离了通过反射操作它的代码逻辑它什么也不是Attribute 本身就是个标记没什么功能。但是别的工具、框架比如上面的控制器在做事的时候会看相关的 Attribute做相应的处理。这是最主要的作用总的来说就是可以用 Attribute 给代码元素类方法成员变量属性 等等打个标签附加一些信息在调用这些代码的时候利用反射取出这些信息并根据这些信息做些不同的事情Attribute 一定是配合反射使用的。也就说你看不到的外层框架性代码一定有调用反射去寻找这些 Attribute。可以利用 Attribute 更好地解耦业务更好地符合单一职责原则比如一个方法要实现三个业务场景保存数据之后要发送一个邮件和发送一个消息就可以在方法中只做保存数据的业务场景利用 Attribute 来实现发送邮件和消息的业务场景。 我是老杨一个奋斗在一线的资深研发老鸟让我们一起聊聊技术聊聊人生。 都看到这了求个点赞、关注、在看三连呗感谢支持。