首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> C# >> 正文

开发应用时如何利用C#自定义属性

从代码中读取属性

    读取属性并检查其中的数据比使用属性或创建属性显著地更加复杂。读取属性要求开发人员要对如何使用一个对象的反射信息有个基本了解。如果你不熟悉反射机制,可以阅读“应用反射”系列文章。

假设我们正在查看一个类,我们想知道该类的那个properties使用了Alias属性以及都有哪些别名。列表E实现了这个功能。

列表 E

Private Dictionary<string, string> GetAliasListing(Type destinationType)
{
//Get all the properties that are in the
// destination type.
PropertyInfo[] destinationProperties = destinationType.GetProperties();
Dictionary<string, string> aliases = newDictionary<string, string>();
for each (PropertyInfo property in destinationProperties)
{
//Get the alias attributes.
object[] aliasAttributes =
property. GetCustomAttributes( typeof(Alias), true);

//Loop through the alias attributes and
// add them to the dictionary.
foreach (object attribute in aliasAttributes)
foreach (string name in ((Alias)attribute).Names)
aliases.Add(name, property.Name);
//We also need to add the property name
// as an alias.
aliases.Add(property.Name, property.Name);
}
return aliases;
}

这段代码最重要的地方是对GetCustomAttributes的调用以及循环遍历属性提取别名的地方。

    GetCustomAttributes方法可以在我们从对象类型中提取的PropertyInfo类中找到。在上面的应用中,我们将要查询的属性类型作为参数传给GetCustomAttributes方法,同时还将“true”传递给该方法使得可以列出继承的属性。如何发现匹配的属性,GetCustomAttributes方法将返回一个对象数组。还有另外一种超负荷方法可以列出property上的所有属性,而不管属性类型是什么。

    一旦有了属性,我们需要检查它们并从中提取需要的信息。这可以通过遍历由GetCustomAttributes方法得到的对象数组并将每个对象映射成我们要查询的属性来完成。在完成映射后,我们就可以像访问任意其它类的properties一样来访问属性的properties。

    正如我在前面所说,读取属性是最困难的部分。然而,一旦我们写后读取属性的代码后,将来回忆和实施起来就相当容易了。

应用示例

    我强烈建议你下载本文包含的这个应用示例。这个应用示例在一个简单的Windows应用中实现了下面的属性,并演示了如何读取和使用它们。

  • Alias——这同上面提到的Alias属性一样。当你需要将一种类型的对象翻译为另一种类型时,需要使用该属性。例如,如果你有一个Customer对象和一个Address对象,你可能需要将它们都翻译为一个合并的包含人名和地址的Person对象,当一个不能使用直接映射时,可以使用该属性。
  • DisplayName——示例代码中包括检查一个类实例并将它的property名称与值输出到屏幕上的代码。这个属性可用于覆盖送到屏幕显示的property名称。例如,一个名为“FName”property可以使用DisplayName属性,因此它显示为“First Name”。
  • Examine——这个属性使得示例应用中的PrintObject方法进入更深一层,并输出使用了Examine属性的property的值。例如,示例应用中的Customer对象将Examine属性应用到Address property。这将指示PrintObject方法输出address property中的所有信息。
  • Hide——这个属性指示PrintObject()方法不要将当前property输出到屏幕。该属性用在Customer对象的SSN property上。

    示例应用中包含了实现和读取属性每一步的注释,仔细看一下,我敢保证你会发现一些在自己的应用中可以利用的功能。

上一页  [1] [2] 

【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航