• c#特性


    什么是特性?

    定义:特性本质上也是有一种类,通过添加特性,就可以实例化这个特性类;

           特性在我的理解就是在类或者方法或者参数上加上指定的标记,然后实现指定的效果。

          特性(attribute)是一种允许我们向程序的程序集添加元数据的语言结构.它是用于保存程序结构信息的某种特殊类型的类.

          将应用了特性的程序结构叫做目标.
          设计用来获取和使用元数据的程序(对象浏览器)叫做特性的消费者
          .NET预定了很多特性,我们也可以声明自定义特性.

    特性大致可以分为两种:
    一:系统自带的特性
    二:自定义特性

          1、系统自带的特性:

    Obsolete特性(方法前):
    可以使用Obsolete特性将程序结构标注为过期的,并且在代码编译时,显示警告信息.
    格式:[Obsolete("警告信息",true)]//最后一个参数为true表示这个方法不能被调用了
    
    Conditional特性(方法前):
    是否屏蔽特定方法的调用,
    System.Diagnostics;//所需命名空间 
    格式: # define hong //如果定义了宏则调用,如果没有定义则不调用(宏声明在最外层).
            [Conditional("hong")]
    Conditional特性(方法前):
    是否屏蔽特定方法的调用,
    System.Diagnostics;//所需命名空间 
    格式: # define hong //如果定义了宏则调用,如果没有定义则不调用(宏声明在最外层).
            [Conditional("hong")]
    DebuggerStepThrough特性(方法前)
    可以跳过Debugger的单步调试,不让进入该方法(当我们确定这个方法没有任何错误的时候,可以使用这个)
     格式:[DebuggerStepThrough]
    调用者信息特性(参数前):
    using System.Runtime.CompilerServices;//导入命名空间
    [CallerFilePath]:调用者的文件路径
    [CallerLineNumber]:调用行数
    [CallerMemberName]:调用者方法名称
    (其他特性)
    CLSCompliant:声明可公开的成员应该被编译器检查是否符合CLS.兼容的程序集可以被任何.NET兼容的语言使用
    Serializable:声明结构可以被序列化.
    NonSerialized:声明结构可不可以被序列化
    DLLlmport:声明是非托管代码实现的.
    WebMethod:声明方法应该被作为XML Web服务的一部分暴露
    AttributeUsage:声明特性能应用到什么类型的程序结构.将这个特性应用到特性声明上.

    如何自定义特性,定义的方式和普通的类定义方式一致,但是,
    第一:需要继承标准特性类
    第二:需要添加标准特性,用来限制特性的使用范围等
    第三:必须要定义构造函数,即使是空的
    如下:

    2、自定义特性类

      

    特性的定义(图片引用自泰课在线)

    特性类

    使用特性类

    特性的用途:

    5.1.在Web服务中, 使用WebMethod特性来标记方法, 以指示该方法可以通过SOAP协议进行调用,

    5.2.描述当与本机代码进行交互操作时如何封送方法参数(MarshalAsAttribute)

    5.3.描述类、方法和接口的 COM 属性。

    5.4.使用 DllImportAttribute 类调用非托管代码。

    5.5.在标题、版本、说明或商标方面描述您的程序集。

    5.6.描述要持久性序列化类的哪些成员。

    5.7.描述如何映射类成员和 XML 节点以便进行 XML 序列化。

    5.8.描述方法的安全要求。

    5.9.指定用于强制安全性的特性。

    5.11.由实时 (JIT) 编译器控制优化,以便易于调试代码。

    5.12.获取有关调用方的信息的方法。

  • 相关阅读:
    kafka原理深入研究 (转 )
    redis——持久化篇
    IDEA 配置环境和相关工具整理(新手入门)
    Spring Data JPA(官方文档翻译)
    springboot:spring data jpa介绍
    JDK8-十大新特性-附demo
    JDK8新特性一览
    Maven中的pom.xml配置文件详解
    数据库面试题(更新中...)
    互联网协议系列
  • 原文地址:https://www.cnblogs.com/stroll/p/9128259.html
Copyright © 2020-2023  润新知