仓酷云
标题:
ASP.NET教程之.Net Framework 2.0范型的反射利用
[打印本页]
作者:
变相怪杰
时间:
2015-1-16 22:37
标题:
ASP.NET教程之.Net Framework 2.0范型的反射利用
有理由相信是能提供更出色的性能。很多平台无法支持复杂的编译器,因此需要二次编译来减少本地编译器的复杂度。当然可能做不到java编译器那么简易。 在.NetFramework2.0中引进了范型(Generic)的观点,这能够说是一个严重的改善它的优点我在这里也不必多说,到网上能够找到十分多的申明。
我在这里要和人人说的是怎样经由过程反射利用范型的手艺。
一:起首看看范型的FullName
List<string>list=newList<string>();
System.Console.WriteLine(list.GetType().FullName);
System.Console.WriteLine();
这个语句失掉的是:
System.Collections.Generic.List`1[[System.String,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]。
好长呀,剖析一下个中的格局会看出一下几个东东。
System.Collections.Generic.List->申明该Type是甚么范例的。
1、->应当是范型的标记。
System.String,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089->是string范例的FullName。
那末在看看这个语句会呈现甚么?
Dictionary<string,int>dic=newDictionary<string,int>();
System.Console.WriteLine(dic.GetType().FullName);
System.Console.WriteLine();
了局是:
System.Collections.Generic.Dictionary`2[[System.String,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089],[System.Int32,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089]]。
更长,剖析一下:
System.Collections.Generic.Dictionary->申明该Type是甚么范例的。
2->仍是是范型的标记。
System.String,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089->是string范例的FullName。
System.Int32,mscorlib,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089->是int范例的FullName。
从下面的例子能够看出范型的范例和1.1时增添了两个部分,分离是范型的标识部分和范型的参数范例FullName部分。
起首看一下标记部分`1和`2,推测`标识了该范例是范型、前面的数字部分是申明了该范型必要几个范型参数。
如今仍是推测,上面依据推测来使用我们本人的反射实验一下吧:
二:范型反射的实验
看看上面的代码:
stringtlistStr="System.Collections.Generic.List`1[System.String]";
TypetList=Type.GetType(tlistStr);
Objectolist=System.Activator.CreateInstance(tList);
MethodInfoaddMList=tList.GetMethod("Add");
addMList.Invoke(olist,newobject[]{"zhx"});
Console.WriteLine(olist.ToString());
System.Console.WriteLine();
stringtDicStr="System.Collections.Generic.Dictionary`2[[System.String],[System.Int32]]";
TypetDic=Type.GetType(tDicStr);
ObjectoDic=Activator.CreateInstance(tDic);
MethodInfoaddMDic=tDic.GetMethod("Add");
addMDic.Invoke(oDic,newobject[]{"zhx",1});
Console.WriteLine(oDic.ToString());
System.Console.WriteLine();
测试经由过程。不外人人要注重了。范型中的基本范例如:string,int不克不及利用简写的,假如把System.Collections.Generic.List`1[System.String]写成System.Collections.Generic.List`1[string]是不克不及够失掉准确范例的。
三:自已界说的范型反射的利用
起首本人界说一个范型类:
namespaceRefTest
{
publicclassBaseClass<T,V,O>
{
Tt;
Vv;
Oo;
publicvoidSetValue(Tpt,Vpv,Opo)
{
this.t=pt;
this.v=pv;
this.o=po;
}
publicoverridestringToString()
{
returnstring.Format("T:{0}V:{1}O:{2}",t.ToString(),v.ToString(),o.ToString());
}
}
}
利用反射创立范例和挪用办法:
stringtBaseClassStr="RefTest.BaseClass`3[[System.String],[System.Int32],
[System.Collections.Generic.Dictionary`2[[System.String],[System.Int32]]]]";
TypetBaseClass=Type.GetType(tBaseClassStr);
ObjectoBaseClass=Activator.CreateInstance(tBaseClass);
MethodInfoaddMBaseClass=tBaseClass.GetMethod("SetValue");
addMBaseClass.Invoke(oBaseClass,newobject[]{"zhx",1,oDic});
Console.WriteLine(oBaseClass.ToString());
System.Console.WriteLine();
测试乐成。也不知道,我同学昨天说数据挖掘很好。
作者:
分手快乐
时间:
2015-1-18 21:52
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
作者:
第二个灵魂
时间:
2015-1-23 19:37
PHP的源代码完全公开,在OpenSource意识抬头的今天,它更是这方面的中流砥柱。不断地有新的函数库加入,以及不停地更新,使得PHP无论在UNIX或是Win32的平台上都可以有更多新的功能。它提供丰富的函数,使得在程式设计方面有着更好的资源。目前PHP的最新版本为4.1.1,它可以在Win32以及UNIX/Linux等几乎所有的平台上良好工作。PHP在4.0版后使用了全新的Zend引擎,其在最佳化之后的效率,比较传统CGI或者ASP等技术有了更好的表现。
作者:
金色的骷髅
时间:
2015-1-31 19:38
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
作者:
蒙在股里
时间:
2015-2-6 21:30
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
作者:
小魔女
时间:
2015-2-18 19:56
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
作者:
只想知道
时间:
2015-3-6 10:12
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
作者:
活着的死人
时间:
2015-3-13 00:06
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
作者:
小妖女
时间:
2015-3-20 06:10
当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2