VB.Net 知识要点:(3) 数组和面向对象
一、数组
一维数组定义
Dim 数组名(n) As 数据类型,注意n是数组中的最大索引值,不是数组元素个数,索引值必须从0开始
定义并赋值
Dim 数组名()={元素0数据,元素1数据,...,元素n数据}
调整数组元素个数使用ReDim命令,重新定义数组,而原数组元素中的数据将会丢失,除非使用Preserve命令
ReDim Preserve A(29) As Integer
?
二维数组定义
Dim 数组名(,)={{第0列数据},{第1列数据},...,{第n列数据}}
?
随机
Rnd()?生成0~1之间的随机数
产生N~M的随机数Rnd()*(M-N+1)+N
产生1~100之间的整数随机数Int(Rnd()*100+1)
必须先用Randomize()重置随机数表的起点,否则将会出现相同的随机数
?
排序
Array.Sort(数组名)?将一维数组的元素由小到大递增排序
Array.Sort(数组名1,数组名2)?二维数组时先按数组1递增排序,当元素相同时按数组递增排序
?
最大值与最小值
数组名.Length?获取数组元素个数
UBound(数组名)?获取数组最后一个元素的索引值
先将数组排序,最小值为索引0,最大值为索引UBound(数组名)
?
搜索
第一种循序搜索法(适合数据较少时使用)
第二种二分搜索法
第三种Array.IndexOf(数组名,搜索条件,搜索起始索引值),返回索引值
子程序
第一种
Sub 子程序名(p)
?...
End Sub
特点:没有返回值,跳出子程序可用Exit Sub
第二种
Function 函数名(p)
?...
End Function
特点:可以有返回值(函数名=表达式),跳出函数可用Return或Exit Function,前者能返回表达式结果,后者不能
第三种:专门用来创建存取类属性的结构
Public Property p1 As Integer
Get
?Return x1
End Get
Set(ByVal value As Integer)
?x1=value
End Set
End Property
特点:可在Property前加上ReadOnly只读和WriteOnly只写属性,只读属性中只有Get,只写属性中只有Set
第四种
Event
一个模块可以有多个子程序,只要名称不重复即可,不同模块中可以使用相同子程序名称。
调用子程序可用Call 子程序名称()或者直接写子程序名称()
?
参数传递
ByVal 传值调用(可省略),将变量值传递给子程序,当子程序变量值改变时不影响主程序变量值
ByRef 传址调用,将变量对应的内存地址传递给子程序,当子程序变量值改变时,主程序变量值随之改变
如果传递的参数是数组,那么不管指定ByVal还是ByRef都会以传址调用的方式来传递参数
?
内置函数
(1)Math数学类:Abs(绝对值)、Atan、Cos、Exp(指数)、Log(对数)、Round(四舍五入)、Sign(判断正负)、Sin(正弦函数)、Sqrt(平方根)、Tan
(2)数值函数:Fix(返回整数舍去小数)、Hex(转成十六进制)、Int、Oct(转成八进制)、Rnd、Randomize
(3)检查数据类型函数:IsArray、IsDate、IsNumeric
(4)转换数据类型函数:Asc或AscW、CBool、CByte、CChar、CDate、CDbl、CDec、CInt、CLng、CObj、
CShort、CSng、CStr、CType、Chr或ChrW、Str、Val
(5)日期时间函数:DateAdd、DateDiff、DatePart、DateSerial、DateString、DateValue、Day、Hour、
Minute、Month、MonthName、Now、Second、TimeOfDay、Timer、TimeSerial、TimeString、TimeValue、
Today、WeekdayName、WeekDay、Year
(6)数组函数:LBound、UBound
(7)字符串函数:Filter、InStr、InStrRev、Join、Lcase、Left、Len、LTrim、Mid、Replace、Right、
RTrim、Split、StrComp、StrConv、StrDup、StrReverse、Trim、Ucase
(8)字符串类:Compare、CompareTo、Concat、Copy、EndsWith、Equals、IndexOf、Insert、LastIndexOf、
Length、PadLeft、PadRight、Remove、Replace、Split、StartsWith、SubString、ToCharArray、ToLower、
ToString、ToUpper、TrimEnd、TrimStart
?
二、面向对象
类
Class 类名
?'定义属性和方法
?Private ...?私有
?Public?... 公有
?Protected ... 公有,在同一类或子类中可用
?
?'创建存取属性结构
?Public Property p1 As Integer
?Get
??Return x1
?End Get
?Set(ByVal value As Integer)
??x1=value
?End Set
?End Property
End Class
?
构造函数,无返回值
Sub New(ByVal x As Integer)
?...
End Sub
构造函数允许衍生类重载,重载时使用MyBase命令指定重载哪一个构造函数
衍生类的构造函数
Sub New(ByVal dx As Integer)
?MyBase.New(dx)
End Sub
使用MyBase还可以访问基础类的公有数据成员MyBase.x1
?
释放对象
Erase 对象名?将对象解析,释放内存
?
静态组件
Shared cc As Integer?定义静态组件
使用含有静态变量的类所创建的对象彼此可以共同存取同一个静态组件
?
继承
在衍生类{}中第一行Inherits Area,表示该类继承自基础类Area
Public NotInheritable Class Area_pu,表示该衍生类不能被继承
?
重载
在基础类中要被重载的方法使用Overrideable修饰
Overrideable Function 方法名 As 返回值类型
在衍生类中要重载的方法使用Overrides修饰
Overrides Function 方法名 As 返回值类型
?
抽象类
是指无法直接创建对象只能通过继承来创建衍生类的一种特殊类
MustInherit Class area
?Public bottom As Integer
?Public height As Integer
?Overridable Function get_area() As Integer
?End Function
End Class
创建衍生类
Public Class area_pu
?Inherits area
?Public Sub New()
??...
?End Sub
?Public? Overrides Function get_area() As Integer
??getarea=bottom*height/2
?End Function
End Class
?
接口
与抽象类相似的结构,差异是接口中只能声明抽象方法,而无法声明一般方法
Interface area
?Function get_area() As Integer
End Interface
利用接口来产生新类的过程称为接口的实现
Class area_as
?Implements area
?Public k1 As Integer
?Public k2 As Integer
?Sub New()
??k1=20
??k2=30
?End Sub
?Function get_area() As Integer Implements area.get_area
??Return k1*k2
?End Function
End Class
?
多重继承
是指继承两个以上的类
衍生类可继承自基础类A和基础类B
衍生类X可继承自衍生类A和衍生类B
类可继承自接口A和接口B,Implements area, color
?