首页 > 代码库 > .net基础扫盲篇-Attribute

.net基础扫盲篇-Attribute

    在我刚接触的项目中,在实体层见得最多的就是下图中标识出的东西,主要是由它完成了ORM,具体怎么实现的还不太清楚,但肯定和它的关系有很大,所以先去了解一下它,以便之后解开实现过程的真面纱!

    首先,图中标记出的是Attribute类的自定义用法。一般Attribute的是这么使用的:

第一,先自定义一个Attribute类;

    这里我们自定义一个developerattribute的attribute类

<span style="font-family:FangSong_GB2312;font-size:14px;">[AttributeUsage(AttributeTargets.All)]    public class DeveloperAttribute : Attribute    {        private string name;        private string level;        private bool reviewed;        public DeveloperAttribute(string name, string level)        {            this.name = name;            this.level = level;            this.reviewed = false;        }        public virtual string Name { get { return name; } }        public virtual string Level        { get { return level; } }        public virtual bool Reviewed        {            get { return reviewed; }            set { reviewed = value; }        }    }</span>

第二,将Attribute类添加到对应的类上

这里我新建一个UserInfo类,将一个attribute对象附着到上面,如下

<span style="font-family:FangSong_GB2312;font-size:14px;"> [Developer("zhangsan", "5", Reviewed = true)]    public class UserInfo   {        //为了突出显示,代码略。。。   }</span>
第三,获取附着类上attribute对象的属相值

这里对attribute属相值得使用放在了UserInfo类了,看我是怎么获取并使用attribute对象属性的

<span style="font-family:FangSong_GB2312;font-size:14px;"> [Developer("zhangsan", "5", Reviewed = true)]    public class UserInfo    {        public UserInfo()        {            System.Reflection.MemberInfo info = typeof(UserInfo);            DeveloperAttribute att =                (DeveloperAttribute)Attribute.GetCustomAttribute(info, typeof(DeveloperAttribute));/<span style="font-family:微软雅黑;">/该方法主要用于属相值的获取</span>            if (att != null)            {                this.UserName = att.Name;                this.Level = att.Level;                this.IsChild = att.Reviewed;            }        }        private string _name;        public string UserName        {            set { _name = value; }            get { return _name; }        }        public string Level { set; get; }        public bool IsChild { set; get; }    }</span>


简单总结:

上面的实例让attribute类和userinfo类完成了属性的值传递,大概上面的ORM中的实体上附着的attribute对象也会通过这样的值传递,达到实体和数据库表之间的关联,这是下一个思考的方向。




.net基础扫盲篇-Attribute