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

你可能感兴趣的文章
npm学习(十一)之package-lock.json
查看>>
npm安装 出现 npm ERR! code ETIMEDOUT npm ERR! syscall connect npm ERR! errno ETIMEDOUT npm ERR! 解决方法
查看>>
npm安装crypto-js 如何安装crypto-js, python爬虫安装加解密插件 找不到模块crypto-js python报错解决丢失crypto-js模块
查看>>
npm安装教程
查看>>
npm报错Cannot find module ‘webpack‘ Require stack
查看>>
npm报错Failed at the node-sass@4.14.1 postinstall script
查看>>
npm报错File to import not found or unreadable: @/assets/styles/global.scss.
查看>>
npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
查看>>
npm版本过高问题
查看>>
npm的“--force“和“--legacy-peer-deps“参数
查看>>
npm的安装和更新---npm工作笔记002
查看>>
npm的常用配置项---npm工作笔记004
查看>>
npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
查看>>
npm编译报错You may need an additional loader to handle the result of these loaders
查看>>
npm设置淘宝镜像、升级等
查看>>
npm设置源地址,npm官方地址
查看>>
npm配置安装最新淘宝镜像,旧镜像会errror
查看>>
NPM酷库052:sax,按流解析XML
查看>>
npm错误 gyp错误 vs版本不对 msvs_version不兼容
查看>>
npm错误Error: Cannot find module ‘postcss-loader‘
查看>>