莫相离 发表于 2015-1-16 22:48:17

ASP教程之用反射挪用他人的.NET程序里的类和办法...

我想详细了解ASP整站代码与PSP整站代码有什么优缺点,那个更好,更安全,更用容易维护,和管理。。。程序假如想复用他人写的.NET程序但手上只要一个编译过的EXE,那末办法之一是用Reflection(反射)。上面是一些例子,初度上手的人能够参考。

先假定我们要复用的第三方使用程序EXE是由上面的代码编译成的:

usingSystem;
namespaceMyNamespace
{
publicclassMyApp
{
publicMyNestedObjectmyNestedObject=null;
publicclassMyNestedObject{
publicstringname;
}
publicenumFourSeasonsEnum{
spring,summer,autumn,winter
}
publicMyApp(){
}
publicMyApp(MyNamespace.MyFormform){
}
publicMyNestedObjectFoo1(FourSeasonsEnumseason){
returnthis.myNestedObject;
}
publicstringFoo2(){
return"";
}
staticvoidMain(){
}
}
publicclassMyForm
{
publicMyForm(){
}
}
}

以下是一些间接援用经常见的挪用怎样用Reflection来改写:

1.用不含参数的机关函数天生工具

间接援用时,代码是

MyNamespace.MyAppapp=newMyNamespace.MyApp();
用Reflection来挪用的话就必要这么写(记得usingSystem.Reflection)

Assemblyassem=Assembly.LoadFile(@"C:HomeWorkspaceMyNamespacemyapp.exe");
TypeMyAppType=assem.GetType("MyNamespace.MyApp");
ConstructorInfoMyAppType_Constructor=MyAppType.GetConstructor(newType[]{});
objectapp=MyAppType_Constructor.Invoke(newobject[]{});

2.用含参数的机关函数天生工具

间接援用时,代码是

MyNamespace.MyAppapp=newMyNamespace.MyApp(newMyNamespace.MyForm());
用Reflection来挪用的话就必要这么写

Assemblyassem=Assembly.LoadFile(@"C:HomeWorkspaceMyNamespacemyapp.exe");
TypeMyAppType=assem.GetType("MyNamespace.MyApp");
TypeMyFormType=assem.GetType("MyNamespace.MyForm");
ConstructorInfoMyAppType_Constructor=MyAppType.GetConstructor(newType[]{MyFormType});
ConstructorInfoMyFormType_Constructor=MyFormType.GetConstructor(newType[]{});
objectform=MyFormType_Constructor.Invoke(newobject[]{});
objectapp=MyAppType_Constructor.Invoke(newobject[]{form});
3.挪用工具的办法

间接援用时,代码是

MyNamespace.MyAppapp=newMyNamespace.MyApp();
stringstr=app.Foo2();
用Reflection来挪用的话就必要这么写

Assemblyassem=Assembly.LoadFile(@"C:HomeWorkspaceMyNamespacemyapp.exe");
TypeMyAppType=assem.GetType("MyNamespace.MyApp");
ConstructorInfoMyAppType_Constructor=MyAppType.GetConstructor(newType[]{});
objectapp=MyAppType_Constructor.Invoke(newobject[]{});
objectstr=MyAppType.GetMethod("Foo2").Invoke(app,newobject[]{});
4.Set/Get成员变量

间接援用时,代码是

MyNamespace.MyAppapp=newMyNamespace.MyApp();
MyNamespace.MyApp.MyNestedObjectobj=app.myNestedObject;
MyNamespace.MyApp.MyNestedObjectobj2=newMyNamespace.MyApp.MyNestedObject();
app.myNestedObject=obj2;
用Reflection来挪用的话就必要这么写(注重,这里的MyNestedObject类是nestedtype,名字要用"MyNamespace.MyApp+MyNestedObject"而不是"MyNamespace.MyApp.MyNestedObject")

Assemblyassem=Assembly.LoadFile(@"C:HomeWorkspaceMyNamespacemyapp.exe");
TypeMyAppType=assem.GetType("MyNamespace.MyApp");
ConstructorInfoMyAppType_Constructor=MyAppType.GetConstructor(newType[]{});
objectapp=MyAppType_Constructor.Invoke(newobject[]{});
TypeMyNestedObjectType=assem.GetType("MyNamespace.MyApp+MyNestedObject");
FieldInfoMyNestedObjField=MyAppType.GetField("myNestedObject");
objectobj=MyNestedObjField.GetValue(app);

ConstructorInfoMyNestedObjectType_Constructor=MyNestedObjectType.GetConstructor(newType[]{});
objectobj2=MyNestedObjectType_Constructor.Invoke(newobject[]{});
MyNestedObjField.SetValue(app,obj2);
5.利用列举范例

间接援用时,代码是

MyNamespace.MyAppapp=newMyNamespace.MyApp();
MyNamespace.MyApp.MyNestedObjectobj=app.Foo1(MyNamespace.MyApp.FourSeasonsEnum.spring);
用Reflection来挪用的话就必要这么写

Assemblyassem=Assembly.LoadFile(@"C:HomeWorkspaceMyNamespacemyapp.exe");
TypeMyAppType=assem.GetType("MyNamespace.MyApp");
ConstructorInfoMyAppType_Constructor=MyAppType.GetConstructor(newType[]{});
objectapp=MyAppType_Constructor.Invoke(newobject[]{});
TypeFourSeasonsEnumType=assem.GetType("MyNamespace.MyApp+FourSeasonsEnum");
ArrayFourSeasonsEnumValues=Enum.GetValues(FourSeasonsEnumType);
objectSpringValue=FourSeasonsEnumValues.GetValue(0);
objectresult=MyAppType.GetMethod("Foo1").Invoke(app,newobject[]{SpringValue});
---

最初,只需有大概,应当只管不必Reflection,由于比拟起间接挪用,Reflection的功能相称差。



</p>问题是他们究竟是喜欢他们是使用软件时,速度快还是速度慢好.(当然在3秒以内).无论是他们输入资料时,查找资料时,分析资料时.

因胸联盟 发表于 2015-1-17 21:51:50

作为IE上广为流传的动态网页开发技术,ASP以它简单易学博得了广大WEB程序爱好这的青睐,而且它对运行环境和开发品台的不挑剔,以及有大量有效的参考手册,极大的推广了它的发展。

谁可相欹 发表于 2015-1-21 08:57:45

不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍

分手快乐 发表于 2015-2-6 11:56:35

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。

老尸 发表于 2015-2-16 02:55:05

完全不知道到底自己学的是什么。最后,除了教程里面说的几个例子,还是什么都不会。

金色的骷髅 发表于 2015-3-4 23:14:43

掌握asp的特性而且一定要知道为什么。

愤怒的大鸟 发表于 2015-3-11 21:20:15

最近在学asp,不要问我为什么不直接学.net,因为公司网站是asp做的所以有这个需要,卖了本书asp入门到精通,对里面的六大内置对象老是记不住,还有很多属性和方法看的头晕。

只想知道 发表于 2015-3-19 13:55:32

ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。  因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。

透明 发表于 2015-3-28 06:00:31

我想问如何掌握学习节奏(先学什么再学什么)最好详细点?
页: [1]
查看完整版本: ASP教程之用反射挪用他人的.NET程序里的类和办法...