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

你可能感兴趣的文章
OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
查看>>
openoffice使用总结001---版本匹配问题unknown document format for file: E:\apache-tomcat-8.5.23\webapps\ZcnsDms\
查看>>
views
查看>>
OpenPPL PPQ量化(2):离线静态量化 源码剖析
查看>>
OpenPPL PPQ量化(3):量化计算图的加载和预处理 源码剖析
查看>>
OpenPPL PPQ量化(4):计算图的切分和调度 源码剖析
查看>>
OpenPPL PPQ量化(5):执行引擎 源码剖析
查看>>
openpyxl 模块的使用
查看>>
OpenResty & Nginx:详细对比与部署指南
查看>>
openresty 前端开发入门六之调试篇
查看>>
OpenResty(nginx扩展)实现防cc攻击
查看>>
openresty完美替代nginx
查看>>
Openresty框架入门详解
查看>>
OpenResty(1):openresty介绍
查看>>
OpenResty(2):OpenResty开发环境搭建
查看>>
OpenResty(3):OpenResty快速入门之安装lua
查看>>
OpenResty(4):OpenResty快速入门
查看>>
OpenResty(5):Openresty 模板渲染
查看>>
OpenSearch 使用二三事
查看>>
OpenSessionInView模式
查看>>