预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

1.反射:反射是.net中的重要机制,通过反射可以在运行时获得.net中每一个类型,包括类、结构、委托和枚举的成员,包括方法、属性、事件,以及构造函数等。有了反射,既可以对每一个类型了如指掌。下面来演示一下反射的实例(1)新建一个类库项目。在解决方案上单击右键选择添加“新建项目”,在弹出来的框中选择“类库”,在下面名字栏中输入classlib。然后删除class1类,新添加一个类“classperson”,添加如下代码:namespaceclasslib{publicclassclassperson{publicclassperson():this(null){}publicclassperson(stringstrname){name=strname;}privatestringname;privatestringsex;privateintage;publicstringname{get{returnname;}set{name=value;}}publicstringsex{get{returnsex;}set{sex=value;}}publicintage{get{returnage;}set{age=value;}}publicvoidsayhello(){if(null==name)console.writeline("helloworld");elseconsole.writeline("hello,"+name);}}}添加完之后编译生成一下,就会在这个类库项目中的bindebug中有一个classlib.dll文件。然后添加一个控制台应用程序。引入system.reflaction的命名空间。添加的代码如下:usingsystem;usingsystem.collections.generic;usingsystem.linq;usingsystem.text;usingsystem.reflection;//添加反射的命名空间namespaceconsoleapplication4{publicclassprogram{staticvoidmain(string[]args){console.writeline("列出程序集中的所有类型");assemblyass=assembly.loadfrom("classlib.dll");type[]mytype=ass.gettypes();typeclassperson=null;foreach(typepinmytype){console.writeline(p.name);if(p.name=="classperson"){classperson=p;}}console.writeline("列出classpersonl类中的所有的方法");methodinfo[]md=classperson.getmethods();foreach(methodinfominmd){console.writeline(m.name);}console.writeline("实例化classperson类,并调用sayhello方法");objectobj=activator.createinstance(classperson);objectobjname=activator.createinstance(classperson,"飞鹰");methodinfomysayhello=classperson.getmethod("sayhello");mysayhello.invoke(obj,null);//无参数构造函数mysayhello.invoke(objname,null);//有参构造函数console.readkey();}}}运行之后的结果是:列出程序集中的所有类型classperson列出classpersonl类中的所有的方法get_nameset_nameget_sexset_sexget_ageset_agesayhellotostringequalsgethashcodegettype实例化classperson类,并调用sayhello方法helloworldhello,飞鹰2.using的作用(1)引入命名空间,如:usingsystem。(2)using别名。格式:using别名=包括详细命名空间信息的具体的类型例如:在两个命名空间(namespace1,namespace2)里各有一个myclass类,这时可以这样引入命名空间,usingaclass=namespace1.myclass;usingbclass=namespace2.myclass;实例化时:aclassmy1=newaclass;bclassmy2=newbclas