C#的Attribute


在C#的有些教材里,有人把Attribute翻译成属性,但是在C#里还有一个Priority,也被翻成属性。因此在比较严谨的教材里,会直接用Attribute这个英文,也有些教材会翻译成特性。

C#的Attribute主要用在反射时,可以获取这个类,属性成员等的额外信息。

比如我们在操作数据库时,常常会把数据库一行数据,转换成一个Entity。在读数据库时会根据这个Entity里的属性生成一个SQL查询语句。而这个查询语句的字段和表名,就是来自Entity的Attribute。

[TableAttribute("TBLUSERINFO")]

   public classDBTableEntity

   {

       string _userName = "";

       [FieldMapAttribute("USERNAME")]

       public stringUserName

       {

            get{ return _userName; }

            set{ _userName = value; }

       }

       string _userPwd = "";

       [FieldMapAttribute("USERPASSWORD")]

       public stringUserPwd

       {

            get{ return _userPwd; }

            set{ _userPwd = value; }

       }

 }

/// <summary>

   /// 该Attribute定义了数据库各栏位的信息

   /// </summary>

   [AttributeUsage(AttributeTargets.Property)]   

   public classFieldMapAttribute : Attribute

   {

       string _fieldName = "";

       public stringFieldName

       {

            get{ return _fieldName; }

            set{ _fieldName = value; }

       }

       public FieldMapAttribute(string fieldName)

       {

            FieldName = fieldName;

       }

}

 

TableAttribute attritute2 = typeof(DBTableEntity).GetCustomAttributes(typeof(TableAttribute),false)[0] as TableAttribute;

  stringtableName = attritute2.TableName;

首先定义一个Attribute,写法跟定义 Class一样,只是需要继承Attribute。有一个构造函数,传入参数。

然后在属性或类上使用Attribute,如[FieldMapAttribute("USERNAME")],写法像调用一个函数,只是需要用[]包起来。

最后反射DBTableEntity,获取他的Attribute。

 

提供的源码中,完整地实现了,定义Attribute,使用Attribute,遍历Attribute,获取Attribute的值,从而可以拼出一个完成的SQL语句:SELECT USERNAME,USERPASSWORD FROMTBLUSERINFO

 

另外,在.Net中还有一些常用的Attribute,比如DllImport,Seriallize,WebService等。源码中实现了DllImport实现了调用Windows API的代码,功能是创建一个文件夹。有了这个Attribute,凡是Window API能做的事,.Net也都可以做。这个Attribute非常强大,也可以调用如播放影音,WinRar压缩等功能。

 

源码下载地址,请在那个不能显示的图片上点右键,文件另存为,把jpg的后缀改成zip

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值