帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > 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编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·ASP.NET中为DataGrid添加合计字段
·.text urlRewrite介绍
·利用 ASP.NET 的内置功能抵御 Web
·ASP.NET Cache
·用 WebClient.UploadData 方法 上载
·ASP.NET 程序设计-序
·什么是客户端/伺服端(Client/Serve
·因特网应用程序的开发
·网页的种类
·.NET Framework-Microsoft Visual
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统