C#类特性和属性学习(转载)
2010-03-01 09:54 爱研究源码的javaer 阅读(294) 评论(0) 编辑 收藏 举报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(); |
|
} |
} |
} |