.NET Framework 提供了两种访问某类型的元数据的方式:通过 System.Reflection 命名空间中提供的反射 API,以及通过 TypeDescriptor 类。反射是可用于所有类型的通用机制,因为它是基于根 Object 类的 GetType 方法建立的。反射为某个类型返回的信息不可扩展,因为编译了目标类型后就不能对其进行修改。有关更多信息,请参见 反射 中的主题。
相反,TypeDescriptor 是组件的可扩展检查机制:即实现 IComponent 接口的那些类。与反射不同的是,它并不检查方法。通过目标组件的Site 中提供的几种服务,可以动态扩展 TypeDescriptor。
static void Main(string[] args)
{
var defaults = new { controller = "Home", action = "Index", id = UrlParameter.Optional };
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(defaults);
foreach (PropertyDescriptor prop in props)
{
object val = prop.GetValue(defaults);
Console.WriteLine("name:{0}, value:{1}", prop.Name, val);
}
}
output:
name:controller, value:Home
name:action, value:Index
name:id, value: