`
wangfu_02
  • 浏览: 71919 次
社区版块
存档分类
最新评论

.net使用自定义类属性

    博客分类:
  • .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

 

 

 

分享到:
评论

相关推荐

    vb.net 自定义控件(含自定义对话框设置属性) 实例

    vb.net 自定义控件 自定义属性 UITypeEditor UI 类型编辑器 实例 提供一个示例 UITypeEditor,它使用 IWindowsFormsEditorService 显示用于用户输入的 Form。 IWindowsFormsEditorService 只能通过 PropertyGrid ...

    .net使用自定义类属性实例

    在本篇内容中,将详细介绍如何在.NET中使用自定义类属性,包括创建自定义属性类、如何将它们应用到类和属性上,以及如何在运行时检索这些属性信息。我们将从以下几个方面来探讨: 1. 自定义属性的原理与作用 2. ...

    C#.NET 封装自定义组件(控件)Dll

    本主题将详细探讨如何使用C#.NET来封装自定义组件,并通过一个自定义数字文本框的实例进行说明。 首先,创建自定义控件的过程通常包括以下步骤: 1. **定义类**:在C#中,我们需要创建一个新的类,这个类将继承自...

    Asp.net Core中实现自定义身份认证的示例代码

    之后,通过实现一个自定义的认证处理类MyAuthHandler来具体实现自定义身份认证。MyAuthHandler类中实现了IAuthenticationHandler接口的所有必要方法,但核心是AuthenticateAsync方法,在这里定义了验证用户身份的...

    asp.net 自定义用户控件 事件

    ASP.NET自定义用户控件是开发高效、可重用网页应用程序的重要组成部分。它允许开发者创建具有特定功能的自定义组件,这些组件可以嵌入到网页中,并与其他ASP.NET控件一起工作。在ASP.NET中,自定义用户控件提供了一...

    .NET用户自定义日期控件

    在.NET框架中,开发人员经常需要为用户提供直观且易于使用的日期选择界面,这就是.NET日期控件的作用。本文将深入探讨如何在.NET环境中创建用户自定义日期控件,并结合提供的资源进行详细讲解。 首先,日期控件是...

    Asp.net 2.0 自定义控件开发[浮动工具条控件].rar

    这是创建自定义控件的基础,我们需要在这个类中添加属性、方法和事件来实现所需功能。 2. **绘制控件**:重写Render方法,这是自定义控件如何在浏览器上显示的关键。在这个方法中,我们可以使用Response.Write()来...

    Asp.net 用户自定义控件的编写

    5. **使用控件**:一旦注册,就可以像使用内置控件一样在任何Asp.net页面中插入用户自定义控件,通过属性设置其行为,并处理其触发的事件。 接下来,我们要关注一些关键知识点: - **属性**:自定义控件的属性可以...

    asp.net用户自定义控件及调的工程

    这个“asp.net用户自定义控件及调的工程”可能是一个示例项目,演示了如何创建、使用和管理这些自定义控件。下面我们将深入探讨ASP.NET用户自定义控件的相关知识点。 1. **用户自定义控件的创建** - 创建过程:在...

    .net 自定义控件

    本篇将深入探讨.NET自定义控件的创建、使用以及相关知识点。 首先,让我们了解.NET自定义控件的两种主要类型:用户控件(User Control)和自定义服务器控件(Custom Server Control)。用户控件类似于HTML中的组合...

    asp.net 编写自定义控件

    自定义控件是基于.NET Framework的类,通过继承自`System.Web.UI.WebControls.WebControl`或`System.Web.UI.Control`基类来创建。这些类提供了事件处理、属性、样式和行为的管理,允许你构建高度可重用和灵活的UI...

    SuperMap Objects .NET制作自定义专题图

    在本文中,我们将深入探讨如何使用SuperMap Objects .NET库来创建自定义专题图。SuperMap Objects .NET是SuperMap GIS软件开发套件的一部分,它为开发者提供了丰富的接口和类库,使得在.NET环境中构建GIS应用程序变...

    很实用的.net分页自定义控件

    本实践分享的是一个非常实用的.NET自定义分页控件,它简化了传统的分页实现方式,使得开发者可以更高效地集成到自己的项目中。 首先,这个分页控件的核心优势在于其便捷性。只需在后台页面添加一个特定的函数,就...

    asp.net 2.0 自定义控件--翻页(han源码)

    1. **创建类**:继承自ASP.NET提供的基类,如`System.Web.UI.WebControls.WebControl`或`System.Web.UI.WebControls.Button`,这取决于你想要创建的控件类型。 2. **添加属性**:通过添加公共属性来设置控件的行为...

    asp.net开发自定义控件例子

    ASP.NET是一种基于.NET Framework的服务器端...通过学习这些示例和源代码,你可以深入了解ASP.NET自定义控件的开发过程,包括设计模式、控件生命周期和事件处理机制。这将有助于你创建更强大、更灵活的Web应用程序。

    ASP.NET开发自定义组建

    综上所述,ASP.NET自定义组件的开发是一个涵盖多方面技能和知识的过程,涉及到.NET Framework的理解、面向对象编程、事件驱动编程以及对Web应用程序生命周期的掌握。结合提供的文档和文件,开发者可以更深入地学习和...

    .net中Attribute、TypeConverter、UITypeEditor的自定义--.net自定义控件属性特性配置及相关类的设计

    近期使用了.net中的PropertyGrid,通过多方资料例子,感觉有所收获,特将一些心得分享一下: 1、例子展示了属性的各个特性(ReadOnly、Browsable、Category、Description、TypeConverter、Editor、DefaultValue、...

    asp.net验证码自定义控件

    在ASP.NET中,自定义控件是通过继承`System.Web.UI.WebControls.WebControl`或`System.Web.UI.WebControls.Control`类来创建的。在这个案例中,验证码控件可能会继承`WebControl`,并重写`Render`方法以生成图像和...

Global site tag (gtag.js) - Google Analytics