帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > ASP.NET编程 >
变数
作者:佚名 发布时间:2005-04-02 来源:不详
 
变数的基本概念
    在撰写程序的时候,常需要暂时把一些数据存放在一个地方,然后等适当的时机再作处理;这时
就需要一个可供我们快速存取数据的地方,这个地方就是计算机的内存。变量可以被用来:
    ? 作为暂时存对象属性值的地方
    ? 作为一个计算某个程序或是程序代码区块执行次数的记数器
    ? 作为保留从函式(Function)所传回的值
    ? 作为存放数据夹名称或是文件名称的地方
    当我们使用变量的时候,内存会保留一个空间供程序使用。我们不可能直接以指定内存地址的方式来存取内存内的数据,因为直接去存取内存有相当程度的风险,存取不当甚至会导致数据的损坏或系统当机,所以必需请求操作系统分配记忆空间给我们使用,不过这种低阶的工作交给CLR(Common Language Runtime)处理即可;因为程序在执行的时候,内存管理是由CLR 来负责的。这时候我们就可以撰写程序请CLR 向操作系统要求一个内存空间,至于内存会保留多大的空间,则视我们的需要而定。这个向CLR 提出内存需求的动作,我们称为变量的宣告。变量的宣告包括了两个部分:变量名称以及数据型态。变量名称是我们利用有意义的代码来取代十六进制的内存地址,让程序开发人员容易使用及管理变量。数据型态是我们要存取的数据型态,因为系统的内存容量是有限制的,所以我们要宣告适当大小的变量以避免浪费内存空间;变量被分配到的内存容量大小,就是由数据型态来决定。


变量的数据型态
    VB.NET 的变量可以储存文字、数值以及对象等型态的数据。为了要让执行更有效率,VB.NET提供了几种可以储存特定数据的变量型态,如下表所示:




选择变量的数据型态

    要使用变量最好先明确的宣告变量名称及数据型态。宣告正确的变量型态不但可以让你的程序更有效率,并且可以减少内存使用的空间。举例来说,VB.NET 处理整数(Integer 或Short)型别的数据会比处理浮点数(Single 或是Double)型别的数据来的快;而处理精简整数(Short)又比处理整数(Integer)来的快,所以最好使用精简整数来储存100 这个数值。除了内存以及执行效率的考量外,另外我们所要考虑的是数值的精确性。选择Decimal 型态的变量比使用浮点数来的精确,而Double 比Single 来的精确。另外还要考量变量溢位(Overflow)的问题,变量可储存的数据被其储存范围所限制。例如精简整数(Short)型态的变量可以接受的数据范围为-32,768 到32,767,如果超出这个范围则会发生溢位错误。

为变数命名
    当我们决定要使用变量的时候,为变量取一个名称是非常重要的。变量的命名不但要考虑容易理解,而且还要考虑变量名称的一惯性,尤其是当你或别人日后可能会再阅读或维护程序的时候。

命名法则
    变量的命名和其它对象一样被下列的命名法则所限制,为变量取一个清楚且有意义的名称在大型
的项目中特别重要。
命名法则:
    ? 必需以英文字母为开头。
    ? 其中不可包含空格,但可包含数字。
    ? 必需再同一范围内是独一无二的。
    ? 不可以包含标点或型态宣告字符,但可以包含底线。
    ? 不可以和VB.NET 的保留字,或系统对象名称一样。

命名习惯
    对变量的命名我们有一个习惯,那就是将该变量数据型态的缩写放在变量名称前面,这样可以让
程序代码易于阅读及维护。


宣告变量
宣告变量的语法如下:

    我们在VB.NET 中以Dim 关键词来宣告变量,并且在AS 关键词后面指定所要使用的变量型态。「AS 数据型态」用中括号刮起来,表示这个选项是非必要性的,也就是不给也可以。我们在宣告变量的时候可以不指定变量型态, 倘若不指定变量的型态,VB.NET 则预设变量是Object型态的变量,例如:

以上宣告一个名为strUserName 的字符串型态变量。

以上宣告一个名为shtAge 的精简数值型态变量。

以上宣告一个名为objPen 的对象型态变量。

    以上宣告了一个名为objPen 的对象变量。由于使用者没有指定变量的型态,所以VB.NET 就以预设的对象型态作为变量的型态。
当我们以Dim 关键词宣告变量时,VB.NET 就会帮我们把变量准备好,并将该变量依该变量的型态填入初始值。如果变量型态为数值,VB.NET 就会填入0 作为初始值;如果变量型态为字符串,VB.NET 就会为我们填入空字符串「""」;如果变量型态为对象,VB.NET 就会为我们填入空值(Null)。空值不是零也不是空字符串,而是里面要储存的数据还不知道。

变数的初值化
我们在宣告变量的时候也可以指定一个值作为初始值:

以上宣告一个名为strUserName 的字符串型态变量,初始值为Charles。

以上宣告一个名为shtAge 的精简数值型态变量,初始值为30。
为了使用方便,VB.NET 除了支持初始值的设定外,还可用以让我们在同一行中宣告多个变量:

以上宣告了三个变量shtAge、shtHeight 与shtWeight,其数据型态都是精简整数。

以上分别宣告了精简整数型态的变量shtAge 及字符串型态的变量strAddress。

型态宣告字符
VB.NET 为了让我们使用方便,可以利用型态宣告字符来宣告变量,例如:

    以上两个宣告都是宣告为整数型态的变量,这样一来程序的写作就轻松多了。并不是每种数据型态都有型态宣告字符,以下为支持型态宣告字符的数据型态:

    使用型态宣告字符有一个要注意的地方,那就是同一个宣告的叙述中一般宣告法不可以和型态
宣告字符混合使用
。如下面的范例就是错误的:

    另外VB.NET 的变量不分大小写,所以intIncome 和intincome 是一样的。不过为了容易阅读,我们会将型态简写后的第一个字母大写,例如shtAge。变量名称若由两个以上的字所组成,例如纪录使用者名称的字符串型态变量,习惯上我们会取名为strUserName 或是strUser_Name,这样一来就容易阅读多了。接下来我们来做一个简单的例子,以下的程序代码为计算身高173公分的男生体重:

    首先我们先宣告了两个精简整数型态的变量,分别为shtHeight 及shtWeight。先将数值173 存
入变量shtHeight 中,然后利用公式将男生的标准体重算出。男生的标准体重公式为:(身高- 80)×0.7=标准体重,由于身高-80 这个叙述要先执行,所以我们用小括号括起来,VB.NET会优先处理小括号内的叙述,所以执行的结果显示65。

运算子的优先级
    如果没有上述算式小括号的话,计算出来的结果是117 而不是正确的65。这是因为这些我们称
为算数运算子的+-×÷ 等符号有优先级,如下表所示:

    VB.NET 对于优先级高的先执行运算,若优先级一样,则先执行左边的运算。不过要记忆这些运算子的顺序似乎不是很容易,所以我们可以使用小括号来强制指定运算叙述的优先级。VB.NET遇到小括号先执行运算,倘若小括号中还有小括号,则最内层的小括号先执行运算。例如(10×(3 +9))/(8-2) 这个式子,其运算顺序为3+9 先执行,得到12 后再乘以10,得到120 后再除
以8 减2 的结果6,最后就得到正确的答案20。

VB.Net 新增的运算子
VB.NET 支持下列的运算子:

这些运算子可以简化我们程序的输入。

常数
    我们知道变量是用来暂时存放资料的地方,里面的数据随时可以改变。而常数是以有意义的名称代替特定的值,并且不允许改变常数内的数据。倘若使用者在宣告常数后要将常数以新值代替,此时会发生错误。假设我们在程序中使用圆周率3.14159 来计算圆周长以及面积,如下范例所示:

    如果我们的程序中有如上面程序中常常使用的数值3.14159 时,我们就可以考虑用常数了。常常输入一长串的数值可能会发生错误,此时我们就可以利用常数。常数可以帮助我们的程序容易阅读,而且不容易发生输入的错误。下列是常数的宣告语法:

    要使用常数必需以Const 关键词宣告常数,并且可以指定常数的数据型态以及指定的值为何,例如:

以上宣告了单精浮点数型态的常数cnPI,其值为圆周率3.14159。其中数据型态的指定可以省
略,例如:

所以可以将刚才的程序代码改成:

    宣告了常数后,编译器在编译程序时会将常数以常数所代表的值代入常数中,并不影响程序执行的效率。

数组
    数组是一种可以记录许多数据的一种特殊变量结构,这个结构里面是由相同数据型态的元素所组合而成。当我们想要将一些数据型态相同的数据,利用一个变量来管理的时候,数组是一个非常方便的变量结构。数组的宣告语法如下:

    数组的宣告语法和宣告一般变量差不多,一样都使用基本的数据型态(如Short、Integer、String、Single 及Object 等),只不过要在数组名后面加上小括号,并指定数组所要使用元素数量即可。假如我们想要纪录六个人的年龄,若没有使用数组的话就要宣告六个变量,不但不好管理而且容易出错。如果以数组来管理这些信息,程序代码将变的比较精简也比较好管理。我们来观察下面
的叙述:

    上面的叙述宣告了一个名为shtAge 的精简整数型态数组,这个数组可以记录六个元素。宣告完毕后VB.NET 会将数组先在内存里准备好,如下图所示:

    这个数组宣告后在内存中被产生,六个元素分别都填入了初始值0,并且将每个元素分配了一个索引值(index)。数组的索引值一律从0 开始,若要存取指定元素中的数据,则要利用这个索引值;如下范例所示:

    上述程序代码片段将元素0 到5 的内容分别填入20 到25,所以数组内的值就变成下列插图的状况:

    如果想在宣告的时候顺便指定数组内元素的初始值,可以使用下列语法:

    这里就不需要指定小括号里面的元素数量,所以之前所指定的元素值在宣告的时候即可用下列方式指定:

    VB.NET 数组元素的数量最多可以宣告为264-1 个元素(即是Long 型态的范围)。数组虽然方便,可是它是需要付出代价的,这个代价就是越大的数组越占内存空间。由于刚才宣告的shtAge数组可储存6 个精简整数型态的数据,所占的内存空间为6×2Bytes=12Bytes。故对于数组,使用多少就宣告多少。

多维数组
    想要在数组里面记载相关的数据,可以用多维数组。例如刚刚的一维数组记录了六个人的年龄,倘若要多纪录身高,则可以用下列方式宣告一个二维数组:

    上面叙述宣告了一个名为shtStudent 精简整数型态的二维数组,这个数组为6×2 的数组,可以记录12 个元素。此时VB 会将数组先在内存里准备好,如下图所示:

    我们可以将这个二维数组的第一维想象成X 坐标,第二维想象成Y 坐标。倘若执行下列叙述:

则shtStudent 这个二维数组的内容变成:

    如果有需要,我们甚至可以宣告三维数组、四维数组等,VB.NET 最高支持64 维的数组。不过数组的维度越多就越复杂,也就越不容易管理及维护;所以适当的选择数组的元素数目以及维度可以提升程序写作的效率。当你一开始无法精确的确定数组大小时,在宣告数组的时候空出元素的数目即可;如下叙述所示:

然后再程序代码中利用ReDim 叙述来重新分配分配元素实际的数量:

    ReDim 叙述也可以用来重新配置数组的大小。假设数组原来在宣告的时候为6 个元素,如有需要可以利用ReDim 叙述将数组重新扩张或缩小,但数组内的所有数据会消失变回初始值。若希望在改变数组大小的时候可以保留元素的内容,可以在ReDim 后面加上Preserve 关键词。例如:

    以上范例是将shtStudent 这个数组扩张1 个元素,并保留其值。当然,针对多维数组也可改变其元素的数目, 但是数组的维度不可被改变,而且只有最后一维的元素数量可以被改变,若是你改变了数组的维度或是其它维的元素数目,则会导致错误!

对象型态的数组
    数组里面的数据型态,必需要和我们在宣告数组时所指定的数据型态一样。不过如果这个数组的数据型态为对象(Object)型态,则这个数组可以记载各种不的的数据型态,因为对象型态本来就可以容纳各种型态的数据,例如:

    这个范例宣告了一个名为objStudent 并可纪录4 个元素的对象型态数组,分别以姓名、住址、年龄以及生日填入数组中。请注意,VB.Net 对于日期型态的数据规定必须使用「#」号括起来。所以这个数组我们我们总共使用了三种数据型态,分别为字符串、数值以及日期。如果我们要将刚刚只能记一个数据的objStudent 数组改成可以记录6 个人,那么我们可以改成以下的二维数组:

所以要填入第一个学生的资料则变为:

而要填入第二个学生的资料则变为:

其它学生的资料依此类推

数据的输入
    本章前面已经介绍过将数据输出至浏览器的Response 对象,接下来我们来看看如何取得使用者
所输入的数据。欲取得使用者输入的数据,可以利用Request 对象。Request 对象的语法如下:

    由于Request 对象会传回使用者输入的数据,所以必需要使用变量来接收。我们来看看下面这
个例子:

    客户端要传送数据给网页服务器,只要在网址后面加上问号,并将数据名称以及指定的值填入即
可,这个输入的数据我们称为「参数」;如下叙述所示:

    以上输入的参数名称为MyName,参数内容为Charles(注意,参数内容虽然是字符串,但是不
用加双引号)。

    我们利用浏览器向IIS 要求执行EX03.aspx 这个网页的数据时,MyName 这个参数名称会和参
数内容Charles 一并传送过去。我们来了解参数上传的实际情形:

    使用者在要求浏览EX03.aspx 这个网页时,会一并将参数传递至网站伺服端。此时伺服端将此
参数先暂时存放于暂存区中,等aspx 程序透过Request 对象将指定的参数从暂存区取回。我们
也可以一次传递多个参数,例如下列范例码接受两个参数:

在呼叫这个网页时只要以「&」符号来连结第二个参数即可,如下所示:

另外我们来看下列这段程序叙述:

这里的「&」这个连结运算子作为连结字符串用,所以在一行叙述中可以输出这一串文字。

设定IIS 的编码及译码语系
刚刚的aspx 网页我们在输入参数值的时候都是输入英文,如果我们将参数值输入中文:

结果却变成如下的乱码:

    这是因为我们要设定IIS 服务器对于数据编码的语系,这个设定档为config.web。我们利用
WordPad 来撰写这个档案,其内容如下:

    设定档的内容有分大小写,在编辑时要特别注意。编辑好之后,再将这个档案以纯文字文件的方式储存于c:Inetpubwwwroot 这个路径中,则在这个路径之下的数据夹都会受影响;这样一来我们的aspx 网页就可以输入及输出中文了。
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·变数的阶层  (2005-04-02)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·放眼未来 帝国近期将有重大举措!
·PHPWind6.3.2版通行证发布
·帝国备份王2008版正式发布
·帝国备份王2008版发布
·phpcms2007转帝国CMS5.0程序发布
·dedecms5.1转帝国CMS5.0程序发布
·帝国网站管理系统V5.0商业购买说明
   类别最新
·ASP.NET中为DataGrid添加合计字段
·.text urlRewrite介绍
·利用 ASP.NET 的内置功能抵御 Web
·ASP.NET Cache
·用 WebClient.UploadData 方法 上载
·ASP.NET 程序设计-序
·什么是客户端/伺服端(Client/Serve
·因特网应用程序的开发
·网页的种类
·.NET Framework-Microsoft Visual
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统