c#通过反射获取类上的自定义特性


下面这个是笔者在以前的一个项目中用到的。当时是为了在导出excel报表的时侯,通过自定义特性,包含一些可配置的特性在里面。具体的操作excel不是本文重点,本文不会多做说明。下面只写个示例,简单说明一下如何通过反射获取自定义特性。示例只在类和属性上使用了自定义特性。读者可以按照实际的项目需求,合理使用自定义特性。

1、实现实体自定义特性,继承自Attribute类

复制代码

   /// <summary>
    
/// 自定义特性 属性或者类可用  支持继承
    
/// </summary>
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Class, Inherited = true)]
    
public class EnitityMappingAttribute : Attribute
    {
        
private string tableName;
        
/// <summary>
        
/// 实体实际对应的表名
        
/// </summary>
        public string TableName
        {
            
get { return tableName; }
            
set { tableName = value; }
        }

        
private string columnName;
        
/// <summary>
        
/// 中文列名
        
/// </summary>
        public string ColumnName
        {
            
get { return columnName; }
            
set { columnName = value; }
        }
    }
复制代码

注释中我已经写的很清楚,自定义特性中的属性一个是实体实际对应的数据库表名,一个是对应的中文列名称。
2、在实体中使用自定义特性


 /// <summary>
    
/// 会员 ,实际的表名叫MemberInfo,并不是和实体名一致
    
/// </summary>
    [EnitityMapping(TableName="MemberInfo")] 
    
public class Member
    {
        
private int id;
        [EnitityMapping(ColumnName
="关键字")]
        
public int Id
        {
            
get { return id; }
            
set { id = value; }
        }

        
private string userName;
        [EnitityMapping(ColumnName 
= "会员注册名")]
        
public string UserName
        {
            
get { return userName; }
            
set { userName = value; }
        }

        
private string realName;
        [EnitityMapping(ColumnName 
= "会员真实名")]
        
public string RealName
        {
            
get { return realName; }
            
set { realName = value; }
        }

        
private bool isActive;
        
/// <summary>
        
/// 是否活跃  没有附加自定义属性
        
/// </summary>
        public bool IsActive
        {
            
get { return isActive; }
            
set { isActive = value; }
        }
    }

3、显示自定义特性

Code
ps:在获取自定义特性的地方,其实就是利用了GetCustomAttributes方法,这个没什么好说的。在实际开发的时候,通过反射的特性可以省却我们很多繁琐的事情,真像那句话说的,“反射反射,程序员的快乐”。不过,反射的性能问题还是需要格外注意的,比如,今天上午看到老赵的“ Attribute操作的性能优化方式”才发现原来还有那么多内涵。 
最后,再ps,某位jj在我的博客里寻人啊,见“ 这篇”和“ 这篇”的留言(注意日期,就是今天下午),关心一下。有认识的xdjm们通知一下这位大姐啊,谢谢热心的你鸟。


作者:Jeff Wong 
出处:http://jeffwongishandsome.cnblogs.com/ 
本文版权归作者和博客园共有,欢迎围观转载。转载时请您务必在文章明显位置给出原文链接,谢谢您的合作。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值