VB.NET语法基础

 用的时候,传入参数的值是“Cindy”。

函数的定义方式为:

Function functionname ([argument1[,…, argumentn]])

[statements]

[Return value]

[statements]

End Function

对于函数的调用方式是调用函数名functionname()。如果有参数,就按照次序写在括号中。

2.12(02-12.aspx)用一个函数计算两个整数的和。

1:       <script language="vb" runat="server">

2:       Function Add(intData1 as Integer,intData2 as Integer) as Integer

3:                intData1=intData1+intData2

4:                Return intData1

5:       End Function

6:       </script>

7:       <%

8:                Dim intTemp1,intTemp2 as Integer

9:                intTemp1=2

10:              intTemp2=3

11:              Response.Write(Add(intTemp1,intTemp2))

12:              Response.Write("<br>")

13:              Response.Write(intTemp1)

14:     %>

在上面的程序中,有下面几点需要说明:

(1) 在第2行~第5行定义了一个函数Add。这个函数带有两个参数:intData1intData2,并把一个整数作为返回值。

(2) 在第3行把参数intData1intData2的和放到intData1中,并在第4行把intData1作为结果返回。

(3) 在第11行调用了这个函数,并把结果显示出来。

在上面的子过程和函数的讲解过程中,可以看出都可以采用带参数的方式来增加子过程和函数的灵活性。需要说明的是,参数的传递有两种方式:通过值传递参数和通过引用传递参数。

在调用子过程和函数的时候,如果没有明确地指出,所有的参数都是通过值进行传递的。所谓通过值进行传递,就是把参数的值复制到参数中。例如例2.12中第11行的Add(intTemp1,intTemp2),就是通过值进行传递的好例子。在真正执行第2行~第5行定义的Add函数时,是把intTemp1的值2复制给了intData1,把intTemp2的值3复制给了intData2。在第3行把intData1intData2的和赋值给intData1的时候,intData1的值变成了5,但是这个时候,intTemp1的值仍然是2,不是5(通过第13行的执行可以看出来),这就是通过值传递参数。这时,intData1intTemp1是两个不同的变量,在内存中占用不同的存储空间。

在函数和子过程中,使用关键字ByVal来显式表示通过值传递参数。也就是说,如果要用显式的方式进行定义,第2行的函数定义可以写成:

Function Add(ByVal  intData1 as Integer, ByVal  intData2 as Integer) as Integer

默认的情况是采用通过值传递参数。

那么什么是通过引用传递参数呢?请先看下面的例子。

2.13(02-13.aspx)用一个函数计算两个整数的和。

1:       <script language="vb" runat="server">

2:       Function Add(ByRef intData1 as Integer,ByRef intData2 as Integer) as Integer

3:                intData1=intData1+intData2

4:                Return intData1

5:       End Function

6:       </script>

7:       <%

8:                Dim intTemp1,intTemp2 as Integer

9:                intTemp1=2

10:              intTemp2=3

11:              Response.Write(Add(intTemp1,intTemp2))

12:              Response.Write("<br>")

13:              Response.Write(intTemp1)

14:     %>

2.13与例2.12的区别就在于第2行的Add函数的定义。在这里使用了ByRef关键字表示这时的参数是通过引用进行传递的。执行这个程序就会发现,在程序执行完之后,不但intData1的值变成了5,同时intTemp1的值也变成了5

通过引用传递参数的方法是把参数的地址传递进去。在第11行进行传递的时候,不是把intTemp1的值复制给intData1,把intTemp2的值复制给intData2,而是把intTemp1的地址给了intData1的地址,把intTemp2的地址给了intData2的地址。在传递成功之后,intData1就是intTemp1intData2就是intTemp2。所以在第3intData1的值发生变化时,intTemp1的值也同时发生了变化。

2.5.3  变量的作用域

在进行变量声明时,变量声明的位置决定了这个变量的作用范围。在一个过程或函数外声明的变量是全局变量,对本程序内部所有的过程和函数都起作用;而在一个过程或函数内部声明的变量是局部变量,只对本过程或函数起作用。

下面通过一个例子说明全局变量和局部变量的区别。

2.14(02-14.aspx)全局变量和局部变量的使用。

1:       <script language="vb" runat="server">

2:       Dim strGlobal as String="global"

3:       Sub SayHello

4:                Dim strTemp as String="hello!"

5:                Response.Write (strTemp & "<br>")

6:                Response.Write (strGlobal & "<br>")

7:                if strGlobal<>"" then

8:                         Dim strTemp1 as String="hello cindy!"

9:                         Response.Write (strTemp1 & "<br>")

10:              end if

11:              'Response.Write (strTemp1 & "<br>")

12:     End Sub

13:     </script>

14:     <%

15:               SayHello

16:     %>

上面的例子中,有下面几点需要说明:

(1) 2行声明的变量strGlobal定义在所有的函数或者过程之外,所以是一个全局变量。由于在定义这个变量的时候就为这个变量赋值为“global”,所以,在后面的程序中,第一次使用这个变量时这个变量的值就是“global”。

(2) 3行~第12行定义了一个子过程SayHello。在这个过程中,首先在第4行定义了一个变量strTemp,由于这个变量是定义在子过程中的,所以这个变量是一个局部变量。在第5行显示这个变量的值的时候,会显示一个“hello!”字符串。

(3) 6行要显示strGlobal的值,由于这是一个全局变量,所以会显示第1行赋值的“global”。

(4) 7行~第10行定义了一个If/Endif代码块,在这个代码块中,定义了一个块级局部变量strTemp1(8)。由于这个变量是定义在代码块中的,所以只在这个代码块中起作用。所以在第9行要显示它的值的时候,会显示“hello cindy!”。而如果取消第11行的注释,系统将会通告strTemp1变量没有定义。

通过上面的例子可以看出,在编写程序的时候,要时刻注意变量的作用域的问题。因为在不同模块中修改全局变量会导致模块之间相互影响,违反了进行模块化程序设计的初衷。所以要设计好的程序,就应该尽量减少全局变量的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VB.Net常用语法 一:Try………Catch………finally………end try 捕获错误 把一个可能出错的语句放在try后面,如果出错,执行catch语句, catch可以有多个,第一个catch不能捕获的错误,将被下一个catch语句 所捕获。在所有的处理结束后,执行finally语句。 在一个try………end try 过程中可以使用catch与finally两个中的一 个,或者两个一起用, 二:Protected, private, Public 封装控制 这三个关键字一般放在语句最前面,而会置于overloads与Overrides的 后面 public是工程级别外部访问 protected是本族级别以下内部访问 private是不提供非本地访问 三:ByVal sender As Object, ByVal e As System.EventArgs   这是最赏用事件传递参数。被封装于两个对象内, 如果你要传递相应的参数,要在这两个对象里面找,如当前鼠标位置为 e.X e.Y。在VB.Net中有些事件是要自已动手写的, 如窗体鼠标过程,一般加上这个参数在后面的括号内就解决了。 四:重载语法Overloads 如:class class1 public strtem as string overloads public sub subx()重载subx(A状态) strtem=”3” end sub overloads public sub subx(x as string) 重载subx(B状 态) strtem=x end sub end class 如果你如果调用subx()中间没有参数,则VB自动调用重载subx(A状 态), overloads public sub subx()重载subx(A状态) strtem=”3” end sub 结果就是strtem=”3” 如果你这样调用,subx(“这是一个不同的结果”),则VB自动调用重 载subx(B状态) overloads public sub subx(x as string) 重载subx(B状 态) strtem=x end sub 结果就是 strtem=“这是一个不同的结果” 您可以在函数中调用,包括在API中(当然VB.Net不再使用winAPI). 甚至一些至关紧要的过程也不例外:如new过程(此方法王国荣文章中 有介绍) 如: class class1 Overloads Public Sub New() 。。。。。。 。。。。。。 end sub Overloads Public Sub New(s as string) 。。。。。。 。。。。。。 end sub end class 同样有两种调用的方法,如dim as as class1=new class 调用前面 一个无参数的new过程, 而dim asb as class1=new class(“string”)调用第二个new 过程. 切记,如果一个过程或一个函数只有一种状态,不能这样运用。如果您试 图使用overloads关键字,则VB.Net会出现错误的提示要求你移去 overloads 五:Overrides改写 如常见的dispose过程: Overrides Public Sub Dispose() MyBase.Dispose components.Dispose End Sub Overrides表示完全的改写父类提供的过程与函数 不过要记住使用改写的前提是在父类的同一过程或函数的前面也使用了 overrides关键字 六:mybase.new 与mybase.dispose ublic Sub New() MyBase.New Form1 = Me InitializeComponent End Sub Overrides Public Sub Dispose() ' MyBase.Dispose components.Dispose End Sub 这两个过程是任何一个新建工程都会有的,mybase.new是调用当前类的 父类的new过程,同样你也可以加上参数配合父类的重载New过程。如: Overloads Public Sub New () MyBase.New() End Sub Overloads Public Sub New (string) MyBase.New(string) End Sub 七:Structure构造 自定义类型,如: Structure Type1 Dim x as y Dim a as b 。。。。。。。 end structure 这个取代VB6中的使用type………end type方式自定义类型的方法。 八:return返回值 function functionname() return X。。。。。。 end funtion 他的作用与下面一样: function functionname() functionname = X。。。。。。 end funtion

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值