特性Attribute

一、认识属性Attribute

  1. 属性Attribute是一个类,可以用于标识类或类下属性/方法的特性描述
  2. 如下定义了一个类

    class huanghai

    {

    public int Id { get; set; }

    public int Name { get; set; }

    public string SayHi() {

    return "hahahah";

    }

    }

  3. 在主函数中调用,编译和运行没任何问题

  4. 假如在这个类上,用系统自带的Obsolete属性标注,这个属性用来提示或报警调用者的

  5. 此时编译就会警告提示,这个类是不能用的,但是强制运行也是没问题的

  6. 转到Obsolete类的定义可以看到,它是继承了Attribute类,构造函数有三个。上面我们用的是第二个,带一个strin参数的构造函数

  7. 假如我们用第三个构造函数如下

  8. 编译时直接报警,不能运行

二、自定义属性Attribute

  1. 上述时使用系统自带的属性,也可以自己定义属性如下,定义一个类名,然后跟Obsolete类一样继承了Attribute类

    class hhAtrribute:Attribute

    {

public hhAtrribute( )

{

}

public hhAtrribute(string mStr)

{

Desciption = mStr;

}

public string Desciption { set; get; }

public string Desciption2 { set; get; }

}

  1. 在应用类中就可以用这个自定义的属性去修饰类了,目前这个自定义属性没有任何操作。只是单单做一个修饰作用,所以对这个类对象的编译和运行没有任何影响

  2. 上面是使用它的构造函数,也可以直接访问它内部的public成员

  3. 既然自定义属性是一个类,那么它也可以写自定义方法的,只不过这个方法目前还不能调用,是做给后面假如用到反射功能用的。

  4. 一个类可以有多个属性描述

  5. 一个属性默认对于某一个类只能描述该类一次,假如描述两次则会报错

  6. 假如需要描述多次,可以在自定义的属性中,加配置属性(即属性的属性)

    效果:

  7. 上面 [AttributeUsage(AttributeTargets.All,AllowMultiple =true)]是用来描述自定义属性hhAtrribute的属性
    1. 第一个参数是个枚举类型,用来表示自定义属性hhAtrribute可以描述那些结构

      AttributeTargets.All //所有

      AttributeTargets.Class//只能描述类

      AttributeTargets. Method//只能描述方法

      AttributeTargets. Struct//只能描述结构体

      ………

    2. 第二个参数AllowMultiple,表示时候能对同一个结构多次描述
    3. 它还有另外一个参数Inherited,表示时候可以再被继承
  8.  
  9.  

 

 

 

 

 

 

 

 

 

posted @ 2022-09-13 17:43  ihh2021  阅读(54)  评论(0编辑  收藏  举报