仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 821|回复: 10
打印 上一主题 下一主题

[学习教程] ASP.NET网站制作之[你必需晓得的.NET] 第七回:咀嚼范例――从通用范例体系入手下手仓酷云 ...

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:25:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
net网页编程的设计机制:首先产生一个中间码,第二部编译为本地(机器)码。这个机制有很大的缺点。系列文章目次索引:《你必需晓得的.NET
本文将先容以下内容:


  • .NET基本架构观点
  • 范例基本
  • 通用范例体系
  • CLI、CTS、CLS的干系简述
1.弁言

<br>


<br>

本文不是连环画,之以是在开篇以图形的情势来展现本文主题,实在就是想加倍出格的夸大这几个观点的主要性和存眷度,同时但愿从分析其干系和接洽的角度来说述.NETFramework面前的故事。由于,在作者看来想要深切的懂得.NET,必需起首从懂得范例入手下手,由于CLR手艺就是基于范例而睁开的。而懂得范例则有需要把核心放在.NET范例系统的大众基本架构上,这就是:通用范例体系(CommonTypeSystem,CTS)。

我之以是将最基础的内容以自力的章节来年夜加文字,除为前面几篇关于对范例这一话题深切会商做以展垫以外,更主要的是从论坛上、博客间,我发明有良多偕行对.NETFramework基本架构的几个主要系统的了解有所偏向,因而很有需要补上这一课,必备我们在深切探究常识的过程当中,可以熟能生巧。

2.基础观点
仍是老套路,起首引进MSDN对通用范例体系的界说,通用范例体系界说了怎样在运转库中声明、利用和办理范例,同时也是运转库撑持跨言语集成的一个主要构成部分。通用范例体系实行以下功效:


  • 创建一个撑持跨言语集成、范例平安和高功能代码实行的框架。
  • 供应一个撑持完全完成多种编程言语的面向对象的模子。
  • 界说各言语必需恪守的划定规矩,有助于确保用分歧言语编写的对象可以交互感化。
那末我们怎样来了解呢?
仍是一个实际的场景来引进会商吧。小王之前是个VB迷,写了一堆的VB.NET代码,如今他变心了,就投奔C#的阵营,由于盛行嘛。以是固然就想在以后的基于C#开辟的项目中,使用本来VB.NET现成的工具,省点事儿:-)。那末CLR是怎样来完成范例的转换的,比方DimiasSingle变量i,编译器会主动的完成将i由Single到float的映照,固然其缘故原由是一切的.NET编译器都是基于CLS完成的。详细的历程为:CTS界说了在MSIL中利用的预界说数据范例,.NET言语终极都要编译为IL代码,也就是一切的范例终极都要基于这些预界说的范例,比方使用ILDasm.exe剖析可知,VB.NET中Single范例映照为IL范例就是float32,而C#中float范例也映照为float32,由此就能够创建起VB.NET和C#的范例干系,为互操纵打下基本。
.methodpublichidebysigstaticvoidMain(string[]args)cilmanaged
{
.entrypoint
//代码巨细15(0xf)
.maxstack1
.localsinit(float32V_0)
IL_0000:nop
IL_0001:ldc.r41.
IL_0006:stloc.0
IL_0007:ldloc.0
IL_0008:callvoid[mscorlib]System.Console::WriteLine(float32)
IL_000d:nop
IL_000e:ret
}//endofmethodBaseCts::Main已往,因为各个言语在范例界说方面的纷歧致,形成跨言语编程完成的难度,基于这一成绩,.NET中引进CTS来办理各个编程言语范例纷歧致的成绩,范例机制使很多言语的代码能够无缝集成。因而CTS同样成为.NET跨言语编程的基本标准,为多言语的互操纵供应了便利之道。能够复杂的说,基于.NET的言语配合利用一个范例体系,这就是CTS。
进一步的切磋通用范例体系的内容,我们晓得CTS撑持两种基础的范例,每品种型又能够细分出其上级子类,能够以下图来暗示:

<br>

.NET供应了丰厚的范例条理布局,从上图中也能够看出该条理布局是基于单承继条理完成的,反应了.NET面向对象准绳中完成单承继、接口多承继的特性。关于值范例和援用范例,是以后要切磋的重点内容,也是『咀嚼范例』子系列的重中之重,在此不作进一步切磋,可是下面的这张图有需要分明的印在心中,由于没有甚么比这个更基本的了。

3.地位与干系

地位夸大的是CTS在.NET手艺框架中的地位和感化,作者希冀以这类体例来天然的引出.NET手艺架构的其他基础内容,从而在各个手艺要点的条理中,来说分明各个手艺要点的些细接洽,从年夜局的角度来对其有个基础的掌控。我想,如许也能够更好的了解CTS自己,由于手艺历来都不是伶仃存在的。
.NET手艺能够以标准和完成两部分来分别,而我们常常夸大和提起的.NETFramwork,次要包含大众言语运转时(CommonLanguageRuntime,CLR)和.NET框架类库(FrameworkClassLibrary,FCL),实际上是对.NET标准的完成。而别的一部分:标准,我们称之为大众言语架构(CommonLanguageInfrastructure,CLI),次要包含通用范例体系(CTS),大众言语标准(CommonLanguageSpecification,CLS)和通用两头言语(CommonIntermediateLanguage,CIL)。我们以图的情势来看看CTS在.NET手艺阵营中的地位,再来扼要的先容新退场的各个明星。

<br>



  • CLI,.NET手艺标准,已失掉ECMA(欧洲盘算机打造商协会)构造的同意完成了标注化。
  • CTS,本文主题,此不冗述。
  • CLS,界说了CTS的子集,开辟基于CTS的编译器,则必需恪守CLS划定规矩,由本文开首的图中就能够看出CLS是面向.NET的开辟言语必需撑持的最小汇合。
  • CIL,是一种基于仓库的言语,是任何.NET言语编译发生的两头代码,我们能够了解为IL就是CLR的汇编言语。IL界说了一套与处置器有关的假造指令集,与CLR/CTS的划定规矩举行映照,实行IL城市翻译为当地呆板言语来实行。罕见的指令有:add,box,call,newobj,unbox。别的,IL很相似于Java天下里的字节码(Bytecode),固然也完整不是一回事,最次要的区分是IL是立即编译(Justintime,JIT)体例,而Bytecode是注释性编译,明显效力上更胜一踌。
  • .NETFramework,能够说是CLI在windows平台的完成,运转与windows平台之上。
  • CLR,.NET框架中心,也是本系列的中心。相似于Java天下的JVM,次要的功效是:办理代码实行,供应CTS和基本性服务。对CLR的切磋,将陪伴着这个系列的发展来渐渐睁开,在此就未几说了。
  • FCL,供应了一整套的尺度范例,以定名空间构造成树状情势,树的根是System。对程序计划职员来讲,进修和熟习FCL是冲破计划程度的必经之路,由于个中数以万计的类匡助我们完成了程序计划尽年夜部分的基本性事情,主要的是我们要晓得怎样往利用。
可见,这些基础内容互相接洽,以复杂的文字来廓清其观点、接洽和功效,明显还不敷力度。但是在此我们以举一反三的体例来引进对这些常识的寻找,目标是给一个出口,今后来举行更深切的探究是每一个计划职员的发展的关头,就像对FCL的熟悉,必要理论,必要工夫,必要心机。

4.通用划定规矩


  • .NET中,一切的范例都承继自System.Object类。
  • 范例转换,一般有is和as两种体例,详细的切磋能够参考我的另外一拙作《第一回:恩仇情仇:is和as》。别的,另有别的的几个范例转换的体例:(typename)valuename,是通用办法;Convert类供应了天真的范例转换封装;Parse办法,合用于向数字范例的转换。
  • 能够给范例创立别号,比方,usingmynet=Anytao.net.MyClass,其优点是当必要有两个定名空间的同名范例时,能够分明的做以区分,比方:
usingAClass=Anytao.net.MyClass;
usingBClass=Anytao.com.MyClass;
实在,我们经常使用的int、char、string对应的是System.Int32、System.Char、System.String的别号。


  • 一个对象取得范例的举措是:obj.GetType()。
  • Typeof操纵符,则常在反射时,取得自界说范例的Type对象,从而猎取关于该范例的办法、属性等。
  • 可使用CLSCompliantAttribute将程序集、模块、范例和成员标志为切合CLS或不切合CLS。
  • IL中利用/checked+开关来举行基元范例的溢出反省,在C#中完成这一功效的是checked和unchecked操纵符。
  • 定名空间是从功效角度对范例的分别,是一组范例在逻辑上的汇合。
5.结论
范例的话题,是个老失落牙的囫囵觉,但也是个永不言退的反动党。在实践的程序计划中,我们常常要吃这一亏。由于,良多非常的发生,良多功能的消耗,良多冗余的计划都和范例解下不解之缘,以是明晰、分明的懂得范例,没有甚么不成以。主要的是,我们以甚么角度来懂得和化解,内功的修炼仍是要从内力入手下手。本系列不求一应俱全,但求以更奇怪、更周全的角度,分明、洁净、深切的把某个成绩说透,此足尹。
咀嚼范例,就从CTS入手下手了。

<br>
参考文献
(USA)JeffreyRichter,AppliedMicrosoft.NETFrameworkProgramming
(USA)DavidChappell,Understanding.NET
广而告之
[预报]
扼要的探究了CTS的基础常识和几个干系,我们将要把文字侧重在对范例的深切探究上,近期本系列就以范例这一话题为中心来懂得以下几个相干主题:值范例和援用范例,装箱与拆箱,强范例等。这些观点和手艺都是.NET基础常识中最主要的内容,我将经由过程本人的视角和概念来揭开范例观点中的主要常识点,层层深切、循规蹈矩的翻开通向.NET更深条理的年夜门。
以是,本文是个展垫,下回会更出色和等候。
若相依 该用户已被删除
沙发
发表于 2015-1-21 05:38:27 | 只看该作者
提供基于组件、事件驱动的可编程网络表单,大大简化了编程。还可以用ASP.NET建立网络服务。
因胸联盟 该用户已被删除
板凳
发表于 2015-1-27 21:25:49 | 只看该作者
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
金色的骷髅 该用户已被删除
地板
发表于 2015-1-30 16:32:31 | 只看该作者
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
山那边是海 该用户已被删除
5#
发表于 2015-2-4 20:20:32 | 只看该作者
逐步缩小出错代码段的范围,最终确定错误代码的位置。
透明 该用户已被删除
6#
发表于 2015-2-9 16:58:23 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
爱飞 该用户已被删除
7#
发表于 2015-2-27 12:01:37 | 只看该作者
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
冷月葬花魂 该用户已被删除
8#
发表于 2015-3-5 11:05:21 | 只看该作者
主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。
兰色精灵 该用户已被删除
9#
发表于 2015-3-6 16:52:53 | 只看该作者
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
柔情似水 该用户已被删除
10#
发表于 2015-3-13 04:19:54 | 只看该作者
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
简单生活 该用户已被删除
11#
发表于 2015-3-20 12:39:28 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 17:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表