博客
关于我
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/

你可能感兴趣的文章
Pandas数据处理与分析教程:从基础到实战
查看>>
Pandas数据结构之DataFrame常见操作
查看>>
pandas整合多份csv文件
查看>>
pandas某一列转数组list
查看>>
Pandas模块,我觉得掌握这些就够用了!
查看>>
Pandas玩转文本处理!
查看>>
SpringBoot 整合 Mybatis Plus 实现基本CRUD功能
查看>>
pandas的to_sql方法中使用if_exists=‘replace‘
查看>>
Springboot ppt转pdf——aspose方式
查看>>
pandas读取csv编码utf-8报错
查看>>
pandas读取parquet报错
查看>>
pandas读取数据用来深度学习
查看>>
pandas读取文件时,不去掉前面的0 保留原有的数据格式
查看>>
Pandas进阶大神!从0到100你只差这篇文章!
查看>>
spring5-介绍Spring框架
查看>>
pandas,python - 如何在时间序列中选择特定时间
查看>>
Spring 框架之 AOP 原理深度剖析
查看>>
Pandas:如何按列元素的组合分组,以指示基于不同列的值的同现?
查看>>
Pandas:将一列与数据帧的所有其他列进行比较
查看>>
PANDA和GLOB:将文件夹中的所有xlsx文件转换为CSV类型错误:__init__()获得意外的关键字参数‘;xfid‘;
查看>>