ASP教程之.net的reflection (1)
ASP在国内异常流行,因为国内大多使用的是盗版的Windows和盗版的SQLServer,而ASP+COM+SQLServer实际上也是一种不错的搭配,其性能也不输于PHP+MYSQL,特别是Windows系统和SQLServer都有图形界面,比APACHE和MYSQL易于维护,因此对于不重视知识产权的国家来说也是一种不错的选择。在我的文章《C#基于接口的编程》中,我议论了利用笼统的接口作为编程典范的各类长处。分别接口和实行历程,如今一定不是新的头脑,实践上它是com编程的中心。大概基于接口的在明显的特性是多态性和立即反省(RTTI).RTTI同意客户端程序在运转时会见工具。比方,假如一个工具实行IAthlete接口,一个客户端程序可以查找然后绑定这个接口用于挪用和定位另外一个接口。查询接口是壮大的,是com+的基本。同时,它对可以在一个工具上实行接口导向又是极度有效的和明白需要的,这是.net一个出格主要的观点。在先容这个观点之前,让我们再回忆一些信息关于在.net中功效性和散布的基本元素--汇合。
在COM(+),组件睁开的逻辑和物理单位是一个.dll文件。在.net平台中,睁开的基本单位是汇合。与COM(+)组件分歧的是一个.net也许是有多个文件构成,只管它被看做是一个单一的何不成支解的功效和实行单位。一个汇合文件也是自形貌的,它包括被称之为两头言语的控制代码和附加的元数据,这个元数据给想绑定到这些代码的客户供应丰厚的信息。.net的每一个汇合是出名的清双数据布局。清单包括以下信息:
1、姓名和版本信息
2、别的汇合的参考信息
3、平安界限的信息。
4、汇合中一切范例的信息
毫无疑问,汇合清单相似于COM(+)的范例库。清单有在范例库中不存在的长处。这个凌驾了这一课的局限,我们将在这篇文章的第二部分举行报告。被使用.net汇合的客户端程序将要利用清单。由于每一个汇合包括元数据的很多信息,客户程序在运转时可以失掉汇合的内容。这个历程就叫做reflection.Reflection不但可以查询基本类,并且运转时能静态挪用办法,乃至于输入可以间接实行的IL代码。在你的代码中有两种办法来利用reflection,ReflectionAPI和System.Reflection名字空间。System.reflection是极度卖力的,它包括快要40个类。在文章的其他部分,我将先容reflection的基本,怎样用它区查询汇合类,办法,和运转时挪用办法的范例。为了树模在.net中的reflection名字空间,我将用上面的"reflection"类来讲明:
//Reflect.cs
namespaceCSharpReflectionSamples
{
usingSystem;
///<summary>
///Thereflectclasswillbeusedtodemonstratethebasicsof
///.NETreflection.Thisclasscontainsprivatemembervars,
///aconstructor,asamplemethod,andsampleaccessormethods.
///</summary>
publicclassReflect
{
//privatemembervariables
privateintintTest;
privatestringstrTest;
//constructor
publicReflect(intintData)
{
//constructorlogic
intTest=intData;
}
//basicmethod
publicintAMethod(intintData)
{
returnintData*intData;
}
publicstringS
{
get
{
//returnmembervar
returnstrTest;
}
set
{
//setmembervar
S=value;
}
}
}
}
正如你所看到的那样,这个类包括一个机关器,一个例子办法,一个例子存取办法(失掉和设置)。在System.Reflaction名字空间中心是一个名为type的类。这个type范例包括很多办法和到很多类信息的一种登录出口。Type类参考能够靠typeof大概GetType的办法失掉。下表枚举了一些类范例的办法,包含示例GetTypeof和typeof办法的代码段。
Name
Description
GetFields()
ReturnsanarrayofFieldInfoobjectsdescribingthefieldsintheclass.
GetMethods()
ReturnsanarrayofMethodInfoobjectsdescribingthemethodsoftheclass.
GetConstructors()
Returnsalltheconstructorsforanobject.
GetInterfaces()
Getsallinterfacsimplementedbythetype.
GetMembers()
Getsallthemembers(fields,methods,events,etc.)ofthecurrenttype.
InvokeMember()
Invokesamemberofthecurrenttype.
BaseType
GetsaTypeobjectforthetypesimmediatebasetype.
IsAbstract
Returnstrueifthetypeisabstract.
IsClass
Returnstrueifthetypeisaclass.
IsEnum
Returnstrueifthetypeisanenum.
IsNestedPublic
Returnstrueifatypeisnestedwithinanotherandispublic.
Namespace
Retrievesthenamespaceofthetype.
namespaceCSharpReflectionSamples
{
usingSystem;
usingSystem.Reflection;
///<summary>
///SummarydescriptionforClient.
///</summary>
publicclassClient
{
publicstaticvoidMain()
{
//thetypeofoperatorandtheGetTypemethod
//bothreturnaTypeobject.
Typetype1=typeof(Reflect);
ReflectobjTest=newReflect(0);
Typetype2=objTest.GetType();
Console.WriteLine("TypeofobjTestis{0}",type2);
}
}
}
由于ASP提供的是一对多的服务,所以用户的一些特殊需求很难得到满足。 在平时的学习过程中要注意现学现用,注重运用,在掌握了一定的基础知识后,我们可以尝试做一些网页,也许在开始的时候我们可能会遇到很多问题,比如说如何很好的构建基本框架。 我可以结合自己的经验大致给你说一说,希望对你有所帮助,少走些弯路。 ASP也是这几种脚本语言中最简单易学的开发语言。但ASP也是这几种语言中唯一的一个不能很好支持跨平台的语言。 因为ASP脚本语言非常简单,因此其代码也简单易懂,结合HTML代码,可快速地完成网站的应用程序。 他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。 运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。 以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。 那么,ASP.Net有哪些改进呢?
页:
[1]