博客
关于我
C# 特性 简而易懂的笔记
阅读量:520 次
发布时间:2019-03-07

本文共 2050 字,大约阅读时间需要 6 分钟。

虽然菜鸟教程的内容比较基础,但通过自己的学习和探索,逐渐对C#的特性有了一定的理解。今天决定系统地整理一下C#中的三个主要特性:ObsoleteConditionalAttributeUsage。这些特性在软件开发中非常有用,可以帮助开发者在不同场景下更方便地管理代码。


1. Obsolete 特性

Obsolete 特性主要用于标识某些已经过时或不再支持的方法、类或代码部分。这种特性在维护大的项目时非常有用,可以让已经移除的代码部分仍然存在,但不会影响到新开发人员。它支持两个参数,分别是默认参数和布尔参数。

  • 单参数

    使用时只需在方法或类上标注[Obsolete("此类已经过期啦!")],默认第二个参数为false,这表示虽然警告,但方法仍然可以被调用。

  • 双参数

    [Obsolete("此类已经过期啦!", true)]中的true表示该方法将由于过时而无法被调用,false表示仅给出警告而不会阻止调用。

示例代码:

class Attributes {    [Obsolete("此类已经过期啦!", false)]     public void ObsoleteTest() {        Console.WriteLine("测试函数:Obsolete");    }}

2. Conditional 特性

Conditional 特性用于隐藏或只在特定条件下启用的代码部分。这种特性非常适合对某些功能进行后续开发或测试时不想影响现有功能的执行。

使用s.Stdout.WriteLine方式的代码示例:

class Attributes {    [Conditional("TEXT")]     public void ConditionalTest() {        Console.WriteLine("测试函数:Conditional");    }        [Conditional("Text")]     public void C() {        Console.WriteLine("又是一个测试 Conditional 的函数!");    }}

在主函数中调用时,必须在文件顶部定义#define TEXT,否则隐藏的函数将不会执行:

class Program {    static void Main(string[] args) {        Attributes attributes = new Attributes();        attributes.ConditionalTest();        attributes.C();        Console.WriteLine("\n按任意键退出...");        Console.ReadKey();    }}

3. AttributeUsage 特性

AttributeUsage 特性是用来定义自定义特性的。它允许开发者定义特性并指定应用的范围(如类、方法等),还能限制是否继承以及是否允许多个特性同时修饰目标代码。

自定义特性的一般结构如下:

  • 必须继承自Attribute类。
  • 属性名必须以Attribute结尾。

示例:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]class HelpAttribute : Attribute {    public HelpAttribute(string str) {        this.str = str;    }    public string Str {        get {            return this.str;        }    }    private string str;}

使用自定义特性标注的类:

[Help("这是一个自定义的特性!")]class Test {    public void Print() {        Console.WriteLine("测试自定义特性!");    }}

注意:AttributeTargets.Class表示该特性只能应用在类的顶部。如果使用AttributeTargets.All,就可以应用在类、方法、构造函数等多个位置。


总结

通过对ObsoleteConditionalAttributeUsage特性的学习,我对C#的开发能力有了更全面的了解。这三大特性在不同场景下都有其独特的用途,尤其是Conditional和自定义特性,在代码管理和优化中非常实用。虽然AttributeUsage的第三个参数Inherited目前尚不清楚具体作用,但计划通过查阅资料进一步深入理解。此外,建议新手从基础功能入手,逐步学习C#的高级特性,以提升编程能力。

转载地址:http://bwvjz.baihongyu.com/

你可能感兴趣的文章
python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
查看>>
python 利用pyttsx3文字转语音
查看>>
python 利用已有Ner模型进行数据清洗合并
查看>>
python 到大数据开发工程师_如何成为一个大数据开发工程师?
查看>>
python 加密解密(base64, AES)
查看>>
Python 包管理器和 Node.js
查看>>
python 启动提示IDLE's subprocess didn't make conne...
查看>>
Python 和 OpenCV.如何检测图像中的所有(填充)圆形/圆形对象?
查看>>
Python 和 RabbitMQ - 聆听来自多个渠道的消费事件的最佳方式?
查看>>
python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
查看>>
python编译exe同时支持32位_第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe...
查看>>
Python 和Java 哪个更适合做自动化测试?
查看>>
Python编程:掌握高级语言程序设计。从零基础到精通,收藏这篇就够了!
查看>>
python 图片转ico
查看>>
python 图片转文字、语音转文字、文字转语音保存音频并朗读
查看>>
python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
查看>>
Python 在并行进程之间共享字典
查看>>
Python 垃圾收集器文档
查看>>
python 基于 wordcloud + jieba + matplotlib 生成词云
查看>>
python 基于detectron或mask_rcnn的mask遮罩区域进行图片截取
查看>>