程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> .net使用自定義類屬性實例

.net使用自定義類屬性實例

編輯:關於ASP.NET

     一般來說,在.net中可以使用Type.GetCustomAttributes獲取類上的自定義屬性,可以使用PropertyInfo.GetCustomAttributes獲取屬性信息上的自定義屬性。

     
    下面以定義一個簡單數據庫表的映射實體類來說明相關的使用方法,基於自定義類屬性和自定義類中的屬性的自定義屬性,可以方便的進行類標記和類中屬性的標記
     
    創建一個類的自定義屬性,用於標識數據庫中的表名稱,需要繼承自Attribute類:

     

    代碼如下: [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)]
    public sealed class TableAttribute : Attribute
    {
            private readonly string _TableName = "";
            public TableAttribute(string tableName)
            {
                this._TableName = tableName;
            }
            public string TableName
            {
                get { return this._TableName; }
            }
    }

     

    創建一個屬性的自定義屬性,用於標識數據庫表中字段的名稱,需要繼承自Attribute類:

     

     代碼如下: [AttributeUsage(AttributeTargets.Property, Inherited = false, AllowMultiple = false)]
    public class FieldAttribute : Attribute
    {
            private readonly string _FieldName = "";    ///數據庫的字段名稱
            private System.Data.DbType _Type = System.Data.DbType.String;   ///數據庫的字段類型
     
            public FieldAttribute(string fieldName)
           {
                  this._FieldName=fieldName;
           }
     
            public FieldAttribute(string fieldName,System.Data.DbType type)
           {
                  this._FieldName=fieldName;
                  this._Type=type;
           }
     
           public string FieldName
            {
                get { return this._FieldName; }
            }
     
            public System.Data.DbType Type
            {
                 get{return this._Type;}
            }
    }


     
    創建一個數據實體基類:

     

     

    代碼如下: public class BaseEntity
    {
            public BaseEntity()
            {
            }
     
             /// <summary>
            /// 獲取表名稱
            /// </summary>
            /// <returns></returns>
            public string GetTableName()
            {
                Type type = this.GetType();
                object[] objs = type.GetCustomAttributes(typeof(TableAttribute), true);
                if (objs.Length <= 0)
                {
                    throw new Exception("實體類沒有標識TableAttribute屬性");
                }
                else
                {
                    object obj = objs[0];
                    TableAttribute ta = (TableAttribute)obj;
                    return ta.TableName;                            //獲取表名稱
                }
            }
            /// <summary>
            /// 獲取數據實體類上的FieldAttribute
            /// </summary>
            /// <param name="propertyName"></param>
            /// <returns></returns>
            public FieldAttribute GetFieldAttribute(string propertyName)
            {
                PropertyInfo field = this.GetType().GetProperty(propertyName);
                if (field == null)
                {
                    throw new Exception("屬性名" + propertyName + "不存在");
                }
                object[] objs = field.GetCustomAttributes(typeof(FieldAttribute), true);
                if (objs.Length <= 0)
                {
                    throw new Exception("類體屬性名" + propertyName + "沒有標識FieldAttribute屬性");
                }
                else
                {
                    object obj = objs[0];
                    FieldAttribute fieldAttribute=(FieldAttribute)obj;
                    fieldAttribute.FieldValue=field.GetValue(this,null);
                    return fieldAttribute;
                }
            }
    }


     
    創建數據實體:

     

     

    代碼如下: [Table("Wincms_Dictionary")]            ///映射到數據庫的Wincms_Dictionary表
    public class Wincms_Dictionary : BaseEntity
    {
             private int _DictionaryId;
     
             public Wincms_Dictionary()
             {
             }
     
            [Field("DictionaryId",DbType.Int32)]                ///映射到數據庫的Wincms_Dictionary表中的字段
            public int DictionaryId
            {
                get { return this._DictionaryId; }
                set
                {
                    this._DictionaryId = value;
                }
            }
    }
     
    ///基於實體類獲取實體對應的表名稱和字段名稱
    public class Test
    {
     
           public static void main(string[] args)
            {
                   Wincms_Dictionary dict=new Wincms_Dictionary();
                   Console.WriteLine("表名稱:"+GetTableName(dict));
                   Console.WriteLine("字段名稱:"+GetFieldName(dict,"DictionaryId"));
                   Console.Read();
            }
     
           ///獲取實體表名稱
           public  static string GetTableName(BaseEntity entity)
           {
                    return entity.GetTableName();
           }
     
           ///獲取實體字段名稱
           public static string GetFieldName(BaseEntity entity,string propertyName)
           {
                  FieldAttribute fieldAttribute=entity.GetFieldAttribute(propertyName);
                  return fieldAttribute.FieldName;
           }
    }


    輸出結果為:

     

     

    代碼如下: 表名稱:Wincms_Dictionary
    字段名稱:DictionaryId
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved