当前位置: 首页 > news >正文

在c#中常用的特性

在C#中,特性(Attributes)是一种将元数据应用于程序实体(如类、方法、属性等)的方式。这些元数据可以在编译时和运行时被读取,常用于配置、自定义行为、装饰器模式等场景。以下是一些C#中常用的特性:

  1. [Serializable] - 表示该类可以被序列化,用于二进制序列化。

    [Serializable]
    public class MyClass { }

  2. [Obsolete] - 标记一个类、方法或属性为过时,如果代码中使用了这些元素,编译器会发出警告。

    [Obsolete("Use NewClass instead.")]
    public class OldClass { }

  3. [AttributeUsage] - 用于定义自定义特性的属性。

    [AttributeUsage(AttributeTargets.Class, Inherited = false)]
    public class MyCustomAttribute : Attribute { }

  4. [Conditional] - 用于条件编译,只有当定义了特定的符号时,方法才会被调用。

    [Conditional("DEBUG")]
    public void DebugMethod() { }

  5. [Flags] - 表示枚举类型可以用于位字段,即枚举值可以进行位运算。

    [Flags]
    public enum MyFlags { None = 0, Option1 = 1, Option2 = 2 }

  6. [DefaultValue] - 用于指定参数的默认值。

    public void MyMethod([DefaultValue("true")] bool flag) { }

  7. [ParamArray] - 允许方法接受不定数量的参数。

    public void MyMethod([ParamArray] string[] args) { }

  8. [DebuggerStepThrough] - 告诉调试器在调试时跳过该方法的代码。

    [DebuggerStepThrough]
    public void MyMethod() { }

  9. [DebuggerDisplay] - 控制调试器显示对象的方式。

    [DebuggerDisplay("MyObject {MyProperty}")]
    public class MyObject { public int MyProperty { get; set; } }

  10. [DebuggerBrowsable] - 控制调试器如何浏览对象的成员。

    [DebuggerBrowsable(DebuggerBrowsableState.Never)]
    public int MyProperty { get; set; }

  11. [CLSCompliant] - 表示程序元素是否符合公共语言规范(CLS)。

    [CLSCompliant(true)]
    public class MyCompliantClass { }

  12. [CallerMemberName] - 当使用StringInfoInsertLineInfo方法时,自动传递调用成员的名称。

    public void Trace([CallerMemberName] string memberName = "")
    {Console.WriteLine($"Called {memberName}");
    }

特性的使用可以极大地提升代码的灵活性和表达能力

http://www.lryc.cn/news/424942.html

相关文章:

  • Polars简明基础教程十二:可视化(二)
  • python 使用正则表达式判断图片路径是否是超链接
  • 【学习笔记】Day 14
  • 使用SSL认证访问操作手册
  • 网络协议 十一 ARP,RARP,icmp,websocket,webservice,HTTPDNS,FTP,邮件相关的协议, SMTP,POP,IMAP
  • 浏览器插件利器--allWebPluginV2.0.0.16-Stable版发布
  • 设计模式22-迭代器模式
  • 编程深水区之并发⑥:C#的线程池
  • KCTF 闯关游戏:1 ~ 7 关
  • 【海贼王航海日志:前端技术探索】一篇文章带你走进JavaScript(二)
  • 鸿蒙内核源码分析(进程管理篇) | 谁在管理内核资源?
  • SQLALchemy 自动从数据库中映射
  • C++ stack与queue的使用与简单实现
  • 【CS.DB】数据库-关系型数据库-MySQL-3.3.创建和管理表
  • Ceph分布式存储系统的搭建与使用
  • 通过Redsocks将Kali Linux的流量进行代理
  • 基于java五台山景点购票系统(源码+论文+部署讲解等)
  • 基于springboot的网上服装商城
  • QT、C++简单界面设计
  • 代码随想录算法训练营43期 | Day 10——栈与队列part1
  • Java中常用的设计模式
  • leetcode 11-20(2024.08.15)
  • C语言整数溢出的问题
  • Linux学习之路 -- 进程 -- 进程间通信 -- 管道通信
  • GB/T 38082-2019 生物降解塑料购物袋检测
  • docker数据卷和资源控制
  • Kafka系统及其角色
  • 从零开始构建霸王餐返利APP的技术路线与挑战
  • 安装Jmeter,配置jdk
  • Aria2@RPC下载@Alist批量下载