using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Text;
|
|
using System.Reflection;
|
|
namespace ConsoleApplication6
|
{ |
/// <summary>
|
/// AttributeTargets.Class可以对类应用属性
|
/// Inherited能否由派生类或重写成员继承
|
/// AllowMultiple能否为一个程序元素指定多个指示属性实例
|
/// 也就是说AllowMultiple=false 对于一个类型,该特性只能用一次
|
/// 若一个Class类型前面出现多个TableAttribute,则会出现编译错误
|
/// </summary>
|
[AttributeUsage(AttributeTargets.Class,Inherited=true,AllowMultiple=false)]
|
public class TableAttribute : Attribute
|
{
|
private string _tableName;
|
public TableAttribute()
|
{
|
|
}
|
public TableAttribute(string tableName)
|
{
|
this._tableName = tableName;
|
}
|
public string TableName
|
{
|
get
|
{
|
return this._tableName;
|
}
|
set
|
{
|
this._tableName = value;
|
}
|
}
|
}
|
/// <summary>
|
/// 列特性
|
/// AttributeTargets.Property可以对属性应用特性
|
/// </summary>
|
[AttributeUsage(AttributeTargets.Property,Inherited=false,AllowMultiple=false)]
|
public class ColumAttribute : Attribute
|
{
|
private string _columName;
|
private DbType _dbType;
|
|
public ColumAttribute()
|
{
|
|
}
|
public ColumAttribute(string columName)
|
{
|
this._columName = columName;
|
}
|
public ColumAttribute(string columName, DbType dbType)
|
{
|
this._columName = columName;
|
this._dbType = dbType;
|
}
|
public string ColumName
|
{
|
get
|
{
|
return this._columName;
|
}
|
set
|
{
|
this._columName = value;
|
}
|
}
|
public DbType DbTypeAttr
|
{
|
get
|
{
|
return this._dbType;
|
}
|
set
|
{
|
_dbType = value;
|
}
|
}
|
}
|
|
[Table("User")]
|
public class User
|
{
|
[Colum("userId",DbType.Int32)]
|
public int UserId { get; set; }
|
[Colum("userName", DbType.String)]
|
public string UserName { get; set; }
|
}
|
|
class Program
|
{
|
static void Main(string[] args)
|
{
|
User u = new User();
|
u.UserId = 6;
|
u.UserName = "allen";
|
|
|
Type myObjType = u.GetType();
|
Dictionary<string,string> columName = new Dictionary<string,string>();
|
//获取自定义特性
|
object temp = myObjType.GetCustomAttributes(typeof(TableAttribute),false).First();
|
TableAttribute myAttr = temp as TableAttribute;
|
Console.WriteLine("表名:{0}", myAttr.TableName);
|
|
Console.WriteLine("列的名称和值:");
|
foreach (PropertyInfo pi in myObjType.GetProperties())
|
{
|
object attr = pi.GetCustomAttributes(false).First();
|
ColumAttribute cattr = attr as ColumAttribute;
|
Console.WriteLine("{0}:{1}",cattr.ColumName,pi.GetValue(u,null));
|
}
|
|
Console.ReadKey();
|
|
}
|
}
|
} |