志在指尖
用双手敲打未来

C#中的Attribute运用

1.首先定义一个Attribute,这个Attr是我们自定义的,他继承自Attribute类,在这个属性中,定义一个结构函数用于等会儿对枚举字段的描绘,同时定义一个Name属性来显现枚举字段的描绘。
[C#]纯文本查看复制代码
///
///用于时间类型的属性
///
publicclassTimeAttr:Attribute
{
///
///时间属性的称号
///
///称号
publicTimeAttr(stringname)
{
Name=name;
}
///
///称号
///
publicstringName{get;privateset;}
}
2.定义一个需求的时间枚举,并运用我们定义的Attr
[C#]纯文本查看c#
///
///时间类型
///
publicenumTimeType
{
///
///年
///
[TimeAttr(“年”)]
Year,
///
///月
///
[TimeAttr(“月”)]
Month,
///
///日
///
[TimeAttr(“日”)]
Data,
///
///时
///
[TimeAttr(“时”)]
Hour,
///
///分
///
[TimeAttr(“分”)]
Minute,
///
///秒
///
[TimeAttr(“秒”)]
Second
}
3.经过反射来加载这些Attr,拿到我们需求的东西,微软MSDN对反射有细致阐明,这里写了一个针对TimeType的反射
[C#]纯文本查看复制代码
///
///反射类
///
publicclassReflect
{
///
///获得TimeType的Name属性
///
///类型
///该枚举的属性阐明
publicstaticstringGetTimeName(TimeTypetimeType)
{
//反射
Typetype=typeof(TimeType);
//获得枚举字段
varfield=type.GetField(timeType.ToString());
//获得该字段的TimeAttr属性
varattr=field.GetCustomAttributes(typeof(TimeAttr),true);
//获得值,有且只要一个
if(attr!=null&&attr.Length>0)
return(attr.First()asTimeAttr).Name;
//无值
returnnull;
}
///
///获得Time枚举的一切字段描绘
///
///描绘
publicstaticList<string>GetTimeNames()
{
//汇合
List<string>rel=newList<string>();
//反射
Typetype=typeof(TimeType);
foreach(varitemintype.GetEnumNames())
{
//获得各个字段的描绘
rel.Add(GetTimeName((TimeType)Enum.Parse(type,item)));
}
//返回
returnrel;
}
}
4.我们来获取这些反射的值看看效果
[C#]纯文本查看复制代码
//单个获取
Console.WriteLine(“枚举字段Data的Attr:”+Reflect.GetTimeName(TimeType.Data));
//一切的字段Attr
foreach(variteminReflect.GetTimeNames())
{
Console.WriteLine(item);
}
下面是输出结果:
枚举字段Data的Attr:日






对枚举的Atrr的自定义就被我们拿到了,拿到这些数据之后就能做你想做的了。
总结:这种反射可支撑动态获取枚举的一些描绘,你能够用在项目里面产生对枚举的下拉菜单,同时当你的需求发作变化时,增加了枚举的字段,但是UI不需求再做任何修正,可极大的进步程序的可扩展性。

未经允许不得转载:IT技术网站 » C#中的Attribute运用
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载