标签:
基础拾遗基础拾遗------特性详解
基础拾遗------webservice详解
基础拾遗------redis详解
基础拾遗------反射详解
基础拾遗------委托详解
基础拾遗------接口详解
基础拾遗------泛型详解
前言本来7月份想着是用一个月把基础拾遗写完的,结果断断续续写了4个月了,才写了这几篇,这两天又规划着多写几篇,希望能坚持吧。两天一次和同事聊天竟然好多人都不知道,他们每天却都在用。
1.特性概念特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。
特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。比如我们在执行方法之前,要先判断一下用户有没有执行这个方法的权限,方法出现异常的时候怎么去处理。
1.1.枚举为啥要在这聊枚举,是不是sa,我把代码贴出来。
enum Fruit { [Description("苹果")] Apple, [Description("橙子")] Orange, [Description("西瓜")] Watermelon }
Ok,你只需要F12 Description 会看到
public DescriptionAttribute(string description);
这个家伙,没错DescriptionAttribute(string description),它就是一个特性。现在知道了吧你其实也在用到特性,只是你知不到而已。这个开篇和以往不一样,并且废话有点多。尴尬了,现在回来。
2.预定义特性注:1.特性大致分为两种特性预定义特性和定制特性。
2.预定义特性.Net 框架提供了三种预定义特性:
2.1.AttributeUsage(AttributeUsageAttribute 类):2.1.1.作用:
描述了如何使用一个自定义特性类。它规定了特性可应用到的项目的类型。
2.1.2.使用:
[AttributeUsage(validon, AllowMultiple = false, Inherited = true)]
//限定特性类的应用范围 (这里规定ClassMsg这个特性类只能用于类和字段)
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Field, AllowMultiple = true, Inherited = false)]
//定制MsgAttribute特性类,继承于Attribute
public class ClassMsgAttribute : Attribute
{
//定义_msg字段和Msg属性//Msg属性用于读写msg字段
string _msg;
public string Msg { get { return _msg; } set { _msg = value; } }
public ClassMsgAttribute() { }
//重载构造函数接收一个参数,赋值给_msg字段
public ClassMsgAttribute(string s) { _msg = s; }
}
//调用 //在Person类上标记ClassMsg特性 [ClassMsg(Msg = "这是关于人的姓名信息的类")] class Person { //在_name字段上应用ClassMsg特性 [ClassMsg("这是存储姓名的字段")] string _name; //以下特性无法应用,因为MsgAttribute定义的特性只能用于类和字段 //[ClassMsg("这是读写姓名字段的属性")] public string Name { get { return _name; } set { _name = value; } } } }
以上是AttributeUsage使用时的一个小栗子。
2.1.3.AttributeUsage 参数说明
validon:被放置的语言元素,它是枚举器 AttributeTargets 的值的组合。默认值是 AttributeTargets.All。
AllowMultiple:该值指示能否为一个程序元素指定多个指示属性实例。如果允许指定多个实例,则为 true;否则为 false。默认为 false。
Inherited:该值指示指示的属性能否由派生类和重写成员继承。如果该属性可由派生类和重写成员继承,则为 true,否则为 false。默认为 true。
2.2.Obsolete(ObsoleteAttribute 类):2.2.1.作用:
这个单词是废弃的意思,其实这个特性也是用来 就是舍弃这个方法,生成一个错误或警告。
2.2.2.用法:
[Obsolete( message, iserror)]