每个.NET开发都应掌握的C#特性(Attribute)知识点

这篇具有很好参考价值的文章主要介绍了每个.NET开发都应掌握的C#特性(Attribute)知识点。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上篇文章讲述了C#反射知识点,本文将介绍C#特性(Attribute)的知识点。C#特性(Attribute)是一种强大的元数据机制,用于为代码元素(如类、方法、属性等)添加信息,以影响它们的行为或提供额外的信息。本文将介绍C#特性每个.NET开发都应熟悉的知识点,希望对大家开发有一定的帮助。

1、特性的基本概念

公共语言运行时使你能够添加类似于关键字的描述性声明(称为特性),以便批注编程元素(如类型、字段、方法和属性),它是以方括号([])的形式附加到代码元素上,并可包含参数。特性的定义通常是通过创建一个继承自System.Attribute的自定义类来实现的。下面是一个简单的特性定义示例,是.NET默认创建最小api的官方示例:

  [HttpGet(Name = "GetWeatherForecast")]//特性
  public IEnumerable<WeatherForecast> 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无处不在的特性(Attribute)1-探究

2、.NET无处不在的特性(Attribute)2-简单自定义

3、面试必备:聊聊C#特性(Attribute)文章来源地址https://www.toymoban.com/news/detail-710668.html

来源公众号:DotNet开发跳槽  

到了这里,关于每个.NET开发都应掌握的C#特性(Attribute)知识点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 每个.NET开发都应掌握的C#多线程知识点

    上篇文章讲述了C#特性(Attribute)知识点,本文将介绍多线程的知识点。多线程编程是现代软件开发中的重要组成部分,它能够充分利用多核处理器,提高应用程序的性能和响应性。C#作为.NET开发的主要语言,提供了强大的多线程支持。本文将介绍C#多线程知识点,帮助.NET开

    2024年02月05日
    浏览(64)
  • 每个.NET开发都应掌握的C#委托事件知识点

    上篇文章讲述了C#接口的知识点,本文将介绍C#委托事件知识点。C#作为.NET开发的核心语言之一,提供了丰富的特性来支持面向对象编程和事件驱动的模型。其中,委托和事件是C#中不可或缺的关键概念,每个.NET开发者都应该深入理解它们的作用和用法。委托和事件密不可分,

    2024年02月12日
    浏览(40)
  • 每个.NET开发都应掌握的C#处理文件系统I/O知识点

    上篇文章讲述了C#多线程知识点,本文将介绍C#处理文件的知识点。在.NET开发领域,文件系统I/O是一个至关重要的主题,尤其是在处理文件、目录和数据存储方面。C#作为.NET平台的主要编程语言,提供了丰富而强大的文件系统I/O功能,为开发人员提供了灵活的工具,使其能够

    2024年02月05日
    浏览(45)
  • 每个.NET开发都应掌握的linq知识点

    LINQ是C#3.0引入的特性,让处理对象就像执行SQL语句一样简单,对于提高C#开发效率有革命性的作用。 对于每个.NET开发者来说,掌握C#的LINQ知识点是非常重要的。LINQ是C#的一个强大的特性,它为数据查询和操作提供了简洁、统一的语法,使得数据处理变得更加直观和灵活。 以

    2024年02月14日
    浏览(51)
  • 重要!每个开发者都应该掌握的9个核心算法

    许多开发者似乎都有一个很大的误解,认为算法在编程工作中没什么用处,只是工作面试中的加分项。其实并不是这样的,成为一名有秀的开发者,极其重要的是具备算法思维能力。不仅能够复制和修改标准算法,还能够使用代码运用算法解决遇到的任何问题。 这里介绍9种

    2024年02月11日
    浏览(39)
  • .NET Core反射获取带有自定义特性的类,通过依赖注入根据Attribute元数据信息调用对应的方法

    前段时间有朋友问道一个这样的问题,.NET Core中如何通过Attribute的元数据信息来调用标记的对应方法。我第一时间想到的就是通过C#反射获取带有Custom Attribute标记的类,然后通过依赖注入(DI)的方式获取对应服务的方法并通过反射动态执行类的方法,从而实现更灵活的编程

    2023年04月15日
    浏览(46)
  • 每个.NET开发都应该知道的10个.NET库

    有个.NET面试官反馈面试了一个小白,问他用过哪些.NET库,结果只回答上了几个。作为一个.NET开发者,了解一些常用的.NET库是非常重要的。本文将介绍.NET开发人员应该了解的10个常用.NET库,这些库可以帮助开发人员提高开发效率、简化开发流程,开发出优秀的.NET应用程序。

    2024年02月06日
    浏览(39)
  • 量化开发必掌握的30个知识点【什么是Level-2数据】

    在许多游戏中,战争迷雾/视野是非常重要的一个元素,通过掌握对手动向,隐藏己方意图,实现“知己知彼,百战不殆”。在证券市场中,Level-2行情数据有着异曲同工之妙。 通常我们使用手机炒股的时候,会有这样的提示信息: 买9上有7890挂单?为啥我只能看到买5? Leve

    2024年02月02日
    浏览(41)
  • 开启JDK 11时代,掌握这些新特性,成为Java开发高手!

    大家好,我是小米,欢迎来到小米科技资讯公众号!今天我将为大家详细介绍 JDK 11 的一些新特性。JDK 11 是 Java 语言的一个重要版本,它带来了许多令人振奋的改进和功能,尤其是在电商应用领域。让我们一起来了解吧! JDK 11 引入了全新的 HTTP 客户端 API,取代了过时的 Ht

    2024年02月11日
    浏览(39)
  • .NET5从零基础到精通:全面掌握.NET5开发技能

    C#版本新语法-官网: C#7:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-7 C#8:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-8 C#9:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-9 章节 第一章:https://www.cnblogs.com/kimiliucn/p/17613434.html 第二章:https://www.cnblogs.com/kimiliucn/p

    2024年02月14日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包