.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 自定义控件 自定义属性 UITypeEditor UI 类型编辑器 实例 提供一个示例 UITypeEditor,它使用 IWindowsFormsEditorService 显示用于用户输入的 Form。 IWindowsFormsEditorService 只能通过 PropertyGrid ...
在本篇内容中,将详细介绍如何在.NET中使用自定义类属性,包括创建自定义属性类、如何将它们应用到类和属性上,以及如何在运行时检索这些属性信息。我们将从以下几个方面来探讨: 1. 自定义属性的原理与作用 2. ...
本主题将详细探讨如何使用C#.NET来封装自定义组件,并通过一个自定义数字文本框的实例进行说明。 首先,创建自定义控件的过程通常包括以下步骤: 1. **定义类**:在C#中,我们需要创建一个新的类,这个类将继承自...
之后,通过实现一个自定义的认证处理类MyAuthHandler来具体实现自定义身份认证。MyAuthHandler类中实现了IAuthenticationHandler接口的所有必要方法,但核心是AuthenticateAsync方法,在这里定义了验证用户身份的...
ASP.NET自定义用户控件是开发高效、可重用网页应用程序的重要组成部分。它允许开发者创建具有特定功能的自定义组件,这些组件可以嵌入到网页中,并与其他ASP.NET控件一起工作。在ASP.NET中,自定义用户控件提供了一...
在.NET框架中,开发人员经常需要为用户提供直观且易于使用的日期选择界面,这就是.NET日期控件的作用。本文将深入探讨如何在.NET环境中创建用户自定义日期控件,并结合提供的资源进行详细讲解。 首先,日期控件是...
这是创建自定义控件的基础,我们需要在这个类中添加属性、方法和事件来实现所需功能。 2. **绘制控件**:重写Render方法,这是自定义控件如何在浏览器上显示的关键。在这个方法中,我们可以使用Response.Write()来...
5. **使用控件**:一旦注册,就可以像使用内置控件一样在任何Asp.net页面中插入用户自定义控件,通过属性设置其行为,并处理其触发的事件。 接下来,我们要关注一些关键知识点: - **属性**:自定义控件的属性可以...
这个“asp.net用户自定义控件及调的工程”可能是一个示例项目,演示了如何创建、使用和管理这些自定义控件。下面我们将深入探讨ASP.NET用户自定义控件的相关知识点。 1. **用户自定义控件的创建** - 创建过程:在...
本篇将深入探讨.NET自定义控件的创建、使用以及相关知识点。 首先,让我们了解.NET自定义控件的两种主要类型:用户控件(User Control)和自定义服务器控件(Custom Server Control)。用户控件类似于HTML中的组合...
自定义控件是基于.NET Framework的类,通过继承自`System.Web.UI.WebControls.WebControl`或`System.Web.UI.Control`基类来创建。这些类提供了事件处理、属性、样式和行为的管理,允许你构建高度可重用和灵活的UI...
在本文中,我们将深入探讨如何使用SuperMap Objects .NET库来创建自定义专题图。SuperMap Objects .NET是SuperMap GIS软件开发套件的一部分,它为开发者提供了丰富的接口和类库,使得在.NET环境中构建GIS应用程序变...
本实践分享的是一个非常实用的.NET自定义分页控件,它简化了传统的分页实现方式,使得开发者可以更高效地集成到自己的项目中。 首先,这个分页控件的核心优势在于其便捷性。只需在后台页面添加一个特定的函数,就...
1. **创建类**:继承自ASP.NET提供的基类,如`System.Web.UI.WebControls.WebControl`或`System.Web.UI.WebControls.Button`,这取决于你想要创建的控件类型。 2. **添加属性**:通过添加公共属性来设置控件的行为...
ASP.NET是一种基于.NET Framework的服务器端...通过学习这些示例和源代码,你可以深入了解ASP.NET自定义控件的开发过程,包括设计模式、控件生命周期和事件处理机制。这将有助于你创建更强大、更灵活的Web应用程序。
综上所述,ASP.NET自定义组件的开发是一个涵盖多方面技能和知识的过程,涉及到.NET Framework的理解、面向对象编程、事件驱动编程以及对Web应用程序生命周期的掌握。结合提供的文档和文件,开发者可以更深入地学习和...
近期使用了.net中的PropertyGrid,通过多方资料例子,感觉有所收获,特将一些心得分享一下: 1、例子展示了属性的各个特性(ReadOnly、Browsable、Category、Description、TypeConverter、Editor、DefaultValue、...
在ASP.NET中,自定义控件是通过继承`System.Web.UI.WebControls.WebControl`或`System.Web.UI.WebControls.Control`类来创建的。在这个案例中,验证码控件可能会继承`WebControl`,并重写`Render`方法以生成图像和...