我们就可以遍历这个数组了,打印BugFixAttribute对象的数组,代码下所示:
属性的打印
publicstaticvoidMain()
{
MyMathmm=newMyMath();
Console.WriteLine("CallingDoFunc(7).Result:{0}",
mm.DoFunc1(7));
//获取成员信息并使用它访问自定义的属性
System.Reflection.MemberInfoinf=typeof(MyMath);
object[]attributes;
attributes=
Attribute.GetCustomAttributes(inf,typeof(BugFixAttribute));
//遍历所有的属性
foreach(Objectattributeinattributes)
{
BugFixAttributebfa=(BugFixAttribute)attribute;
Console.WriteLine("\nBugID:{0}",bfa.BugID);
Console.WriteLine("Programmer:{0}",bfa.Programmer);
Console.WriteLine("Date:{0}",bfa.Date);
Console.WriteLine("Comment:{0}",bfa.Comment);
}
}
类型发现
我们可以通过映象的方法来研究一个组合实体的内容,如果要建立需要显示组合体内部信息的工具或动态地调用组合体中的途径,这一方法是非常有用的。
通过映象的方法,我们可以知道一个模块、方法、域、属性的类型,以及该类型的每个方法的信号、该类支持的界面和该类的超级类。我们可以通过如下的形式,用Assembly.Load静态方法动态地加载一个组合体:
publicstaticAssembly.Load(AssemblyName)
然后,可以将它传递到核心库中。
Assemblya=Assembly.Load("Mscorlib.dll");
一旦加载了组合体,我们可以通过调用GetTypes返回一个Type对象数组。Type对象是映射的核心,它表示类、界面、数组、值和枚举等的类型定义。
Type[]types=a.GetTypes();
组合休会返回一个类型的数组,我们可以使用foreach-loop结构显示该数组,其输出将有好几页文档之多,下面我们从中找一小段:
TypeisSystem.TypeCode
TypeisSystem.Security.Util.StringExpressionSet
TypeisSystem.Text.UTF7Encoding$Encoder
TypeisSystem.ArgIterator
TypeisSystem.Runtime.Remoting.JITLookupTable
1205typesfound
我们得到了一个内容为核心库中类型的数组,可以将它们都打印出来,该数组将有1205个项。
对一种类型映射我们也可以对组合体中一种类型进行映射。为此,我们可以使用GetType方法从组合体中解析出一个类型:
publicclassTester
{
publicstaticvoidMain()
{
//检查一个对象
TypetheType=Type.GetType("System.Reflection.Assembly");
Console.WriteLine("\nSingleTypeis{0}\n",theType);
}
}
输出如下所示:
SingleTypeisSystem.Reflection.Assembly
发现成员
我们还可以得到所有成员的类型,显示所有的方法、属性、域,下面的代码演示了实现上述目标的代码。
Figure9GettingAllMembers
publicclassTester
{
publicstaticvoidMain()
{
//检查一个单一的对象
TypetheType=Type.GetType("System.Reflection.Assembly");
Console.WriteLine("\nSingleTypeis{0}\n",theType);
//获取所有的成员
MemberInfo[]mbrInfoArray=
theType.GetMembers(BindingFlags.LookupAll);
foreach(MemberInfombrInfoinmbrInfoArray)
{
Console.WriteLine("{0}isa{1}",
mbrInfo,mbrInfo.MemberType.Format());
}
}
}
尽管得到的输出还非常长,但在输出中我们可以得到如下面的不甘落后民示的域、方法、构造器和属性:
System.Strings_localFilePrefixisaField
BooleanIsDefined(System.Type)isaMethod
Void.ctor()isaConstructor
System.StringCodeBaseisaProperty
System.StringCopiedCodeBaseisaProperty
3COME考试频道为您精心整理,希望对您有所帮助,更多信息在http://www.reader8.com/exam/