zoukankan      html  css  js  c++  java
  • C#中的特性 (Attribute) 入门 (一)

    C#中的特性 (Attribute) 入门 (一)

    饮水思源

    http://www.cnblogs.com/Wind-Eagle/archive/2008/12/10/1351746.html

    http://blog.csdn.net/niwalker/article/list/2

    http://www.cnblogs.com/yangecnu/p/3759784.html

    Desc

    MSDN文档的描述

    ​ 公共语言运行时允许你添加一些类似关键字的描述和声明,叫做Attributes,他对程序中的元素进行标注(类型,字段,方法,属性)等,Attributes和.Net Framework 文件中的元数据保存在一起,可以用来向公共语言运行时描述你的代码,或者在程序运行的时候影响程序的行为。

    • 特性可以向程序集中添加元数据。元数据是有关在程序中定义的类型的信息。所有的.Net 程序集都包含指定的一组数据,这些元数据描述,在程序中定义的类型和类型成员。可以添加自定义的特性,以指定所需的任何附加的信息。
    • 可以将一个或者多个特性应用到整个程序集、模块或者较小的程序元素。
    • 特性可以接收参数
    • 程序可以使用反射来检查自己的元数据或其他程序内的元数据。

    说了这么多,只要记住特性是用来描述代码的,和特性是在编译时被创建的。

    特性参数

    许多特性都有参数,而这些参数可以是

    • 定位参数 : 任何定位参数必须按照特定顺序指定并且不能省略
    • 未命名参数
    • 命名参数 : 命名参数是可选的而且可以按任意顺序指定。
    [DellImport("user32.dll")]
    [DllImport("user32.dll", SetLastError=false, ExactSpelling=false)]
    [DllImport("user32.dll", ExactSpelling=false, SetLastError=false)]
    

    特性目标

    特性的目标是引用程序特性的实体。默认情况下,特性应用于他后面的元素。但是,可以显式标识要将特性应用于方法还是它的返回值等

    [assembly: CLSCompliant(true)]
    
    assembly 整个程序集
    module 当前程序集模块(不同于 Visual Basic 模块)
    field 在类或结构中的字段
    event Event
    method 方法或 get 和 set 属性访问器
    param 方法参数或 set 属性访问器参数
    property Property
    return 方法、属性索引器或 get 属性访问器的返回值
    type 结构、类、接口、枚举或委托

    常用特性

    Obsolete 用来标记方法是一个过时的方法,已经不在使用,.Net Framework 中经常用到这个特性,因为在 .Net Framework 中经常会用一些因为更新而过时的方法,但是MS又不能将其删掉,所以用该特性来告知用户,该方法已经弃用,同时也能保证旧版本是也能被兼容。

    参数说明:

    Obsolete(message,error)

    Message 提示信息

    Error: 是否引发语法错误

    [Obsolete("这个方法已经被弃用", false)]
    static void Debug()
    {
        Console.WriteLine("Debug");
    }
    

    DllImport

    导入外部API

     //DLLImport 用来标记非.Net 函数,表示该方法在外部的dll中定义
     [DllImport("user32.dll", SetLastError = false, ExactSpelling = false)]
     public static extern int MessageBox(int hParent, string Message, string Capt, int Type);
    

    Category

    //我们在写程序中经常会想要我们的自定义的控件的属性可以直接显示在属性栏中
    [Category("Control'name"),Description("Control's description")]
    public bool IsShow{get;set}  
    

    AttributeUsage

    用来标识特性的使用范围

    AttributeTargets 标识特性的使用范围

    AllowMultiple 标识是否能被多次使用

    //标识该特性只能作用于类
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
    public class AuthorAttribute : Attribute
      
    //使用上述特性, 因为上述特性 AllowMultiple 为false,所以下面的代码是会报错的
    [Author("鲁迅认识的那只猹", version = 1.0)]
    [Author("Temp", version = 1.0)]
    public class Student
    {	
        public Student()
        {
    
        }
    }
    

    Summary

    本章我们只是对特性做个一个简单的了解,下一章我们将学习自定义特性 ,我们将用自定义特性做一些很cool的事情。

  • 相关阅读:
    聊聊ASP.NET Core默认提供的这个跨平台的服务器——KestrelServer[转]
    java的war包和jar包的区别
    shell编程中的表达式(-d, -f, -L 等)
    nginx 403 forbidden
    docker删除镜像
    TCP的拥塞控制
    文件从暂存区撤销
    charles修改返回结果的4种方法
    LED 正负极区分
    病毒传播模拟游戏制作日志(三)
  • 原文地址:https://www.cnblogs.com/slyfox/p/7134210.html
Copyright © 2011-2022 走看看