英国现任首相卡梅伦:C#反射教程(3)--Asp.Net/C#/WCF--编程设计网
来源:百度文库 编辑:九乡新闻网 时间:2024/05/03 00:25:59
在命令行下编译ClassRef.cs,执行ClassRef程序,程序提示"请输入所检测的类型名称:",输入"ClassA",运行结果如图7.9所示。
主程序首先进入一个不限次数的while循环,循环中首先判断输入值是否为"quit"。如果输入为"quit"则跳出循环,否则将输入值当做类型名称字符串传递给Type类的GetType()方法,获取Type对象的引用tp,并再次传递给ClassB的Ref()方法。执行完Ref()方法后,程序将继续循环,提示"请输入所检测的类型名称:"直到用户输入"quit"为止。如图7.9所示,输入"ClassA"后,程序直接输出了 ClassA类的细节信息。再次输入"ClassB",程序输出ClassB类的细节信息,运行结果如图7.10所示。
图7.9 反射ClassA类型的信息
图7.10 反射ClassB类型的信息
在信息输出的最后一行,程序正确判断出ClassB类不实现任何接口类型,而在图7.9中,则输出了ClassA类所支持的接口类型列表。这些功能的完成代码如下所示:
+展开-C#Type[] Itp = tp.GetInterfaces();
if (Itp.Length != 0)
{
foreach (Type t in Itp)
{
Console.WriteLine("{0}实现的接口类型->{1}", FullName, t.FullName);
}
}
else
{
Console.WriteLine("{0}不实现的任何接口类型", FullName);
}
以上代码,调用tp对象的GetInterfaces()方法,可返回该类型所实现的接口数组。有一点需要注意,所返回的接口类型是Type类型的对象。继续输入"IClassA",运行结果如图7.11所示。
图7.11 反射IClassA类型的信息
IClassA是自定义的接口类型,继承于IClass接口,而不是实现IClass接口,这里需要注意:.NET所提供的基类库也可以用于反射。最后输入"System.Byte",运行结果如图7.12所示。
图7.12 反射System.Byte类型的信息
程序输出了基类库中System.Byte类的详细信息。
解析
类似于获取指定类型的方法细节信息,同样的方法可以获取指定类型自身细节信息。当获取MyClass类型的某些特征时,方法如以下代码所示:
+展开 -C#using System;
Type tp = System.Type.GetType("MyClass", false, false);
string FullName = tp.FullName;
Console.WriteLine("这个类型的全饰名称是{0}", FullName);
Console.WriteLine("{0}是接口类型吗?->{1}", FullName, tp.IsInterface);
以上代码中,通过读取指定类型的Type对象属性,可获得类型的特征。除了属性,还可以调用其方法返回集合,获取MyClass类型所有成员的方法,如以下代码所示:
+展开-C#using System;
using System.Reflection;
Type tp = System.Type.GetType("MyClass", false, false);
MemberInfo[] mi = tp.GetMembers();
主程序首先进入一个不限次数的while循环,循环中首先判断输入值是否为"quit"。如果输入为"quit"则跳出循环,否则将输入值当做类型名称字符串传递给Type类的GetType()方法,获取Type对象的引用tp,并再次传递给ClassB的Ref()方法。执行完Ref()方法后,程序将继续循环,提示"请输入所检测的类型名称:"直到用户输入"quit"为止。如图7.9所示,输入"ClassA"后,程序直接输出了 ClassA类的细节信息。再次输入"ClassB",程序输出ClassB类的细节信息,运行结果如图7.10所示。
图7.9 反射ClassA类型的信息
图7.10 反射ClassB类型的信息
在信息输出的最后一行,程序正确判断出ClassB类不实现任何接口类型,而在图7.9中,则输出了ClassA类所支持的接口类型列表。这些功能的完成代码如下所示:
+展开-C#Type[] Itp = tp.GetInterfaces();
if (Itp.Length != 0)
{
foreach (Type t in Itp)
{
Console.WriteLine("{0}实现的接口类型->{1}", FullName, t.FullName);
}
}
else
{
Console.WriteLine("{0}不实现的任何接口类型", FullName);
}
以上代码,调用tp对象的GetInterfaces()方法,可返回该类型所实现的接口数组。有一点需要注意,所返回的接口类型是Type类型的对象。继续输入"IClassA",运行结果如图7.11所示。
图7.11 反射IClassA类型的信息
IClassA是自定义的接口类型,继承于IClass接口,而不是实现IClass接口,这里需要注意:.NET所提供的基类库也可以用于反射。最后输入"System.Byte",运行结果如图7.12所示。
图7.12 反射System.Byte类型的信息
程序输出了基类库中System.Byte类的详细信息。
解析
类似于获取指定类型的方法细节信息,同样的方法可以获取指定类型自身细节信息。当获取MyClass类型的某些特征时,方法如以下代码所示:
+展开 -C#using System;
Type tp = System.Type.GetType("MyClass", false, false);
string FullName = tp.FullName;
Console.WriteLine("这个类型的全饰名称是{0}", FullName);
Console.WriteLine("{0}是接口类型吗?->{1}", FullName, tp.IsInterface);
以上代码中,通过读取指定类型的Type对象属性,可获得类型的特征。除了属性,还可以调用其方法返回集合,获取MyClass类型所有成员的方法,如以下代码所示:
+展开-C#using System;
using System.Reflection;
Type tp = System.Type.GetType("MyClass", false, false);
MemberInfo[] mi = tp.GetMembers();
以上代码中,调用tp对象的GetMembers()方法返回一个数组,数组子项的类型为MemberInfo,即所有成员的信息。
注意:MemberInfo类是在System.Reflection命名空间下。
C#反射教程(3)--Asp.Net/C#/WCF--编程设计网
C#反射教程(2)--Asp.Net/C#/WCF--编程设计网
C#接口-接口的继承 - C#编程 - Asp.net C# 学习与研究
C#遍历整个文件夹及子目录的文件代码,.Net技术文章,Asp.net系列教程,Asp.n...
ASP.NET编程中的十大技巧
asp.net编程中实现 MD5 加密
ASP.NET编程中的嵌套If语句
C教程、C++、C#教程、VC教程
ASP.net:DataTable中数据记录的统计-NET编程
建站指南->>网页教学网(http://www.webjx.com)建站指南|网页制作|网页特效|Flash动画|网络编程|素材下载|教程下载|建站|HTML|CSS|JAVASCRIPT|ASP|PHP|JSP|ASP.NET|数据库
C#控件命名规范 asp.net 2.0 www.NorKoo.com
Asp.net &C#开发中的一些注意事项及小技巧
ASP.NET三层架构中数据绑定的问题--51编程网
ASP.NET应用程序规划与设计
ASP.NET中时间格式的转换 - ASP.NET技术论坛 - 编程论坛
.NET (C#) Internals: ASP.NET 应用程序与页面生命周期
在ASP.NET Web应用程序中缓存数据(编程缓存)
C#设计模式(3) -吕
Asp.net(C#)给图片加上水印效果
Entity Framework之深入分析 | ASP.net教程 | 郑少群个人网
Visual C#网络编程之TCP--51编程网
C#产生随机数 - 小云子、asp.net开发学习笔记 - CSDN博客
对C#.NET编程规范的个人见解
ASP.NET 控件开发速成教程:生成复合控件