怎样使wordpress网站文章左对齐,网站诊断及优化方案,网站开发与管理所对应的职位及岗位,微商城网站建设如何上篇文章讲述了C#反射知识点#xff0c;本文将介绍C#特性#xff08;Attribute#xff09;的知识点。C#特性#xff08;Attribute#xff09;是一种强大的元数据机制#xff0c;用于为代码元素#xff08;如类、方法、属性等#xff09;添加信息#xff0c;以影响它们…上篇文章讲述了C#反射知识点本文将介绍C#特性Attribute的知识点。C#特性Attribute是一种强大的元数据机制用于为代码元素如类、方法、属性等添加信息以影响它们的行为或提供额外的信息。本文将介绍C#特性每个.NET开发都应熟悉的知识点希望对大家开发有一定的帮助。
1、特性的基本概念
公共语言运行时使你能够添加类似于关键字的描述性声明称为特性以便批注编程元素如类型、字段、方法和属性它是以方括号[]的形式附加到代码元素上并可包含参数。特性的定义通常是通过创建一个继承自System.Attribute的自定义类来实现的。下面是一个简单的特性定义示例是.NET默认创建最小api的官方示例 [HttpGet(Name GetWeatherForecast)]//特性public IEnumerableWeatherForecast Get(){return Enumerable.Range(1, 5).Select(index new WeatherForecast{Date DateOnly.FromDateTime(DateTime.Now.AddDays(index)),TemperatureC Random.Shared.Next(-20, 55),Summary Summaries[Random.Shared.Next(Summaries.Length)]}).ToArray();}以上特性是http的Get请求特性对外的链接名称是GetWeatherForecast。
详解–C#-特性Attribute
2、内置特性的示例
C#默认提供了一些内置特性例如[Obsolete]、[Serializable]和[Conditional]等。这样以便.NET开发很方便处理基本特定的逻辑任务。
[Obsolete] 特性[Obsolete]特性用于标记已过时的代码。它可以接受一个可选的消息参数用于提供有关为何该代码已过时的信息。
[Serializable] 特性[Serializable]特性用于标记一个类可以序列化以便将对象转换为字节流。例如
[Serializable]
public class SerializableClass
{// 类的成员
}3、自定义特性
当然大家也可以自定义特性以满足项目的特定需求。通常自定义特征需要继承Attribute类并在类上面加AttributeUsage特性然后在这下面处理需要的逻辑具体看之前我的一篇自定义特性的文章.NET特性Attribute简单自定义。下面是自定义了一个显示作者等信息的特性。
[AttributeUsage(AttributeTargets.Class, Inherited false, AllowMultiple false)]
public class AuthorInfoAttribute : Attribute
{public string Author { get; }public string Version { get; }public AuthorInfoAttribute(string author, string version){Author author;Version version;}
}
//使用特性
[AuthorInfo(DotNet开发跳槽, 1.0)]
public class MyAwesomeClass
{// 类的成员
}4、特性的应用场景
那么特性通常用在什么地方呢
特性在.NET生态系统中有多种应用场景比如代码文档的生成代码分析和验证比如属性的Name字段长度验证等可以依赖注入最最重要的是可以实现AOP面向切面编程比如可以用于日志记录和性能监控等。
5、 特性的运行时和编译时用法
特性在C#中既具有运行时用途通过反射机制可以在程序运行时动态检查和操作已应用特性的代码元素又具有编译时用途可在编译时影响编译器的行为例如条件编译、代码生成和静态分析从而为开发者提供了在代码的不同阶段编译和运行时对代码进行元数据标记和定制的灵活性和功能。
6、特性的属性访问
通过反射您可以访问已应用于代码元素的特性及其参数。在上篇介绍反射C#反射知识点的文章已经有所介绍。下面演示如何检查并获取类上的自定义特性信息。
Type type typeof(MyAwesomeClass);
var attributes type.GetCustomAttributes(typeof(AuthorInfoAttribute), false);
if (attributes.Length 0 attributes[0] is AuthorInfoAttribute authorInfo)
{Console.WriteLine($作者: {authorInfo.Author}, 版本号: {authorInfo.Version});
}
//上面的代码将打印MyAwesomeClass类的特性展示出特性属性的作者和版本号。结语
本文讲述了C#特性的一些知识点比如自定义特性、内置特性、获取特性内容等这些知识点都是.NET开发应该掌握的。
希望本文提供的C#特性知识对每个.NET开发者都有所帮助对于C#特性的知识点你还知道哪些欢迎留言讨论或者吐槽本文。
参考
1、微软官网
learn.microsoft.com/zh-cn/dotnet/csharp/language-reference/language-specification/attributes
2、AI查询
**推荐阅读
1、.NET无处不在的特性Attribute1-探究
2、.NET无处不在的特性Attribute2-简单自定义
3、面试必备聊聊C#特性Attribute
来源公众号DotNet开发跳槽