You are on page 1of 148

.

NET Framework
.NET Framework

 .NETFramework 类库( FCL ):它是生成 .NET


Framework 应用程序、组件和控件的基础。 FCL 由命名
空间组成。每个命名空间都包含可在程序中使用的类
型,如类、结构、枚举、委托和接口等。
 公共语言运行库(
CLR ): CLR 是 .NET Framework 的
核心组件,它在操作系统的顶层,负责管理程序的执
行。
 必须使用一个或多个针对 CLR 的语言编译器,如
C# 、 VB 、或 C++ 等编译器。这些针对 CLR 的语言称
为 .NET Framework 兼容语言,相应的编译器称
为 .NET Framework 兼容编译器。
将代码编译为中间语言

 使用 .NET Framework 语言编译器把源代码编译成与机器无


关的中间语言 MSIL ( Intermediate Language ),它不是
本机代码。这个编译步骤产生程序集,程序集是在 CLR 中可
执行的文件,存储在磁盘上,通常具有的扩展名为 .exe
或 .dll 。

将 MSIL 编译为本机代码
程序集

 程序集(
assembly )是 .NET Framework 应用程序的
构造块,是为协同工作而生成的类型和资源的集合,
这些类型和资源构成了一个逻辑功能单元。
 程序集向 CLR 提供了解类型实现所需要的信息。
项目文件组成

 项目文件包含如下内容:

(1)xxx.sln 项目关联、配置等的信息
(2)xxx.suo 开发环境选项的信息
(3)xxx.vbProj 项目文件
(4)Form1.vb 窗体文件
(5)AssemblyInfo.vb 项目集合信息 ( 系统自动建立 )
(6)xxx.exe 可执行文件 ( 在 Bin 文件夹 )
(7)Bin 文件夹 可执行文件的默认路径,可用
APPlication.StartuPPath() 获得该路径。
(8)Debug 文件夹 存放程序调试产生的信息
第一个例子

Sub Main()

Dim XM As String ' 定义存放人姓名的变量 XM

Dim XB As String ' 定义存放人性别的变量 XB

Console.Write(" 请输入您的姓名: ") : XM = Console.ReadLine() ' 输入人的姓名

Console.Write(" 请输入您的性别: ") ' 输出提示信息

XB = Console.ReadLine() ' 读入人的性别

If XB = " 男 " Then ' 对性别进行判断

REM 性别为男时显示的信息

Console.WriteLine(" 欢迎您, {0} 先生! ", XM)

Else

REM 性别为女时显示的信息

Console.WriteLine(" 欢迎您, {0} 女士! ", XM)

End If

Console.Read() REM 读取一个字符,目的是让程序停下来,以便观察结果

End Sub
注释

 单行注释 ’
 多行注释 REM
变量

 变量实质是内存中的一块空间,变量名为内存单元的名
称,内存单元中所装载的数据就是变量的值。变量的定
义格式如下: Declare 变量名 [As 数据类型 ] [= 初值 ]

 ① 语句中的“ Declare” 可以是


Dim 、 Public 、 Protected 、 Friend 、 Private 、 Sh
ared 和 Static 。
 ② 数据类型可以是基本数据类型,也可以是用户自定义
的类型。 As 部分缺省,创建的变量为 Object 类型
 ③ 初值用来定义变量的初值。如果在声明变量的时候没
有给变量赋初值, VB.NET 就用数据类型的默认值来给出
变量

 所有的数值类型 ( 包括 Byte) 为 0 ; Char 类型为二进制


0。
 Object 类型和 String 类型为 NULL 。
 Boolean 型为 False 。
 Date 型为 12:00:00 AM,January l,1 。
变量的隐式声明

 在 VB.NET 中,还可以采用在变量名后面加上一个用于规
定变量类型的说明符,直接确定变量的类型。

类型名 说明符 类型名 说明符


Integer (整 % Double (双精度 #
型) 型)
Long (长整 & Decimal (大浮点 @
型) 数型)
Single( 单精度 ! String (字符串 $
型) 型)
变量的隐式声明

例如 , 有下列语句:
Dim N%=1 ' 定义 N 为整型变量并赋
值1
Dim Prive!=25.05 ' 定义 Prive 为单精度
变量
Dim strSQL$="Select * from student"
' 定义 strSQL 为字符串变量,并赋值为 "Select *
from student"
Option Explicit

 在类模块、窗体模块或标准模块的开头加入以下语句
: OPtion ExPlicit Off
 那么在使用一个变量之前就不必声明该变量, VB.NET
把遇到的每一个没有定义的标识符均看作一个变量。
 如果希望在使用每一个变量之前,均必须声明,可在
类模块、窗体模块或标准模块的开头加入以下语句:
Option Explicit On
变量命名规范

 必须以字母或汉字开头,由字母、汉字、数字或下
划线组成,长度小于等于 255 个字符
 不区分变量名的大小写;常量全部用大写字母表示
数据类型
数据类型

1. 数值型

(1) 整型
整型数: -2147483648 ~ 2147483647

短整型数 : -32768 ~ 32767


长整型数: -2 63 ~ 2 63 -1

(2)字节型 (Byte)
字节型数可以表示无符号的整数, 0 ~ 255
(3) 单精度型 (Single) 和双精度型 (Double)
表示带有小数部分的数
表示数的范围大,但有误差。
(4) 十进制数型 (Decimal) :为处理货币设计的数据类型
数据类型

2. 字符串型数据
字符串型数据是用双引号括起来的一串字符。
3. 日期型数据: Dim a As Date = "2018-11-21“
或” 12/01/2018”
4.
对象型 (Object) 数据:以 32 位的地址形式存储数
据,可以指向任何数据类型。
不特别说明时, VB.NET 会自动将该变量默认为 Object
型变量
数据类型
数据
类型 表示方式 取 值 范 围 。 说    明
数值类型的数据类型
整型 Integer –2147483648 ~ 2147483647 用于表示简单整数
用于 简单 算 术运 算。由于 这个类 型
字 节 Byte 0 ~ 255 的 变 量可以在一 个 字 节 中存 储 ,所

以运算速度最快
短 整 Short –32768 ~ 32767 是整型的一 种 形式,相 对 表示范 围
型 较小
长 整 Long –9223372036854775808 ~ 是整型的一 种 形式,相 对 表示范 围
型 9223372036854775807 较大
单 精 Single –3.402823E38 ~ – 1.401298E-45( 对 于 负 数 ) 和
用于存放单精度浮点数
度型 1.401298E-45 ~ 3.402823E38( 对于正数 )
–1.79869313486232E308 ~
双 精 Double –4.94065645841247E-324( 对于负数 )
用于存放双精度浮点数
度型 和 4.94065645841247E-324 ~
1.79869313486232E308( 对于正数 )

当小数位为 0 的时候,为
–79228162514264337593543950335 ~
79228162514264337593543950335 ;
小数 Decimal 常用于存储货币值
当小数位为 28 的时候,为
–7.9228162514264337593543950335 ~
7.9228162514264337593543950335
常量

 符号常量:用户声明,便于程序阅读或修改

Const 符号常量名 [As 类型 ] = 表达式


 系统常量:系统提供许多内部常量和枚举

例如: vbCrLf 回车 / 换行组合符

枚举 如控件的颜色、边框线型等
可空类型

 可空类型与其对应的值类型相比,除了值类型允许
的取值之外,还可以赋值为 nothing 。例如:

Dim age As Integer?

age = Nothing

Console.WriteLine(age)

age = 20

Console.WriteLine(age)
可空类型

 也可在声明的同时赋值: Dim age As Integer? =


nothing;
 与 nothing 进行相等测试,例如:
If Not age Is Nothing Then
 使用可空类型的 HasValue 属性,例如:
If age.HasValue Then
 可以使用 Value 属性 ( 只读 ) 来获取可空类型变量的值
,如:

age.Value
可空类型

 也可以通过可空类型的 GetValueOrDefault() 方法
来返回可空类型变量的值,当可空类型变量的值为
nothing 时,该方法将返回该类型变量的默认值,
否则返回其实际值,例如:

n = age. GetValueOrDefault();
 当 age 为 nothing 时, n 将赋值为 integer 类型的
默认值 0
类型转换

 数据类型的转换有自动转换和强制转换 2 种。

1 .自动转换

要实现自动类型转换,要同时满足 2 个条件:
 2 种类型彼此兼容
 目标类型的取值范围大于源类型
类型转换

2 .强制类型转换
当两种类型彼此不兼容,或者目标类型的取值范围小
于源类型,自动转换无法进行,这时就需要进行强制
类型转换。这种从一个大容量的数据类型到小容量的
数据类型的赋值,这可能造成数量级的损失。
Convert

 如果两个类型的变量不兼容,比如 String 与
Integer 或者 String 与 Double
 这时可以使用 Convert 进行转换
Dim s = "123"
Dim i = Convert.ToInt32(s)
s = "123.456"
Dim d1 = Convert.ToDouble(s)
Parse 和 TryParse

 Parse 方法可用于类型转换
Dim number = Integer.Parse("123")

 用 Convert 和 Parse 进行转换 成功了就成了, 失


败了就抛异常。 TryParse 与 Integer.Parse 又较
为类似,但它不会产生异常,转换成功返回 true
,转换失败返回 false 。最后一个参数为输出值,
如果转换失败,输出值为 0 。
Dim number = 100
Dim b = Integer.TryParse("123abc", number)
Console.WriteLine(number)
将表达式转换为数据类型 允许的要进行转换的表达式数据类型
CBool Boolean 数据类型 (VB) 任何数值类型(包括  Byte 、 SByte 和枚举类型)、 String 、 Object

CByte Byte 数据类型 (VB) 任何数值类型(包括  SByte 和枚举类型)、 Boolean 、 String 、 Object
CChar Char 数据类型 (VB) String, Object
CDate Date 数据类型 (VB) String, Object

CDbl Double 数据类型 (VB) 任何数值类型(包括  Byte 、 SByte 和枚举类型)、 Boolean 、 String 、 Object

CDec Decimal 数据类型 (VB) 任何数值类型(包括  Byte 、 SByte 和枚举类型)、 Boolean 、 String 、 Object

CInt Integer 数据类型 (VB) 任何数值类型(包括  Byte 、 SByte 和枚举类型)、 Boolean 、 String 、 Object

CLng Long 数据类型 (VB) 任何数值类型(包括  Byte 、 SByte 和枚举类型)、 Boolean 、 String 、 Object

CObj Object 数据类型 任何类型

CSByte SByte 数据类型 (VB) 任何数值类型(包括  Byte 和枚举类型)、 Boolean 、 String 、 Object

CShort Short 数据类型 (VB) 任何数值类型(包括  Byte 、 SByte 和枚举类型)、 Boolean 、 String 、 Object

CSng Single 数据类型 (VB) 任何数值类型(包括  Byte 、 SByte 和枚举类型)、 Boolean 、 String 、 Object

任何数值类型(包括  Byte, SByte 和枚举类型)、 Boolean 、 Char 、 Char 数


CStr String 数据类型 (VB)
组、 Date 、 Object

当转换为“基本数据类型”(包括基本类型数组)时,相应转换关键字所允许的相同类型
CType 逗号 (,) 后面指定的类型 当转换为“复合数据类型”时,其实现的接口和继承的类
当转换为一个已经在其上重载  CType 的类或结构时,该类或结构

CUInt UInteger 数据类型 任何数值类型(包括  Byte 、 SByte 和枚举类型)、 Boolean 、 String 、 Object

CULng ULong 数据类型 (VB) 任何数值类型(包括  Byte 、 SByte 和枚举类型)、 Boolean 、 String 、 Object

CUShort UShort 数据类型 (VB) 任何数值类型(包括  Byte 、 SByte 和枚举类型)、 Boolean 、 String 、 Object
算术运算符
字符串运算符

& 万能型
+ 有条件 ( 左右都是字符串 )
1) 数值型 : 则进行算术加运算;
2) 一个为数字字符,另一个为数值,自动将数字字
符转换为数值后进行算术加;
3) 一个为非数字字符,另一个为数值型,出错。
操作 结果 操作
结果
"ab" & 123 "ab123 " "ab" + 12 出错
"12" & 456 " 12456 " "12" + 456 468
"12" & True "12True" "12" + True 11
注意: 在 变 量后使用 运 算符& 时 , 变 量 与 & 间应 加一 个
空格
关系运算符

运算符 例 结果
= " ABCDE " = " ABR " False
> " ABCDE " > " ABR " False
>= " bc" >= "abcde " True
< 23<3 False
<= " 23 " <=" 3 " True
<> " abc" <> "abcde " True
关系运算符

“1”<“2”…<“A”<“B”…<“a”<“b”…
1. 如果 字符串 1 的第 n 位 ( 最高位 ) 的 ASCII 码值 等于
字符串 2 的第 n 位的 ASCII 码值 , 则 继续 比 较 下一位
2. 如果 字符串 1 的第 n 位的 ASCII 码值 大于 字符串 2
的第 n 位的 ASCII 码值 , 则 输 出 结 果 :1, 表示字符串 1
> 字符串 2;
3. 如果 字符串 1 的第 n 位的 ASCII 码值 小于 字符串 2
的第 n 位的 ASCII 码值 则 输 出 结 果 :-1 表示字符串 1 <
字符串 2;
4. 如果 每一位的 ASCII 码值 都相等 , 而且 长 度相同 , 则
输 出 结 果 :0 表示字符串 1 == 字符串 2;
逻辑运算符
选择结构

1. If…Then 语句 ( 单分支结构 )
If < 表达式 > Then
语句块
End If
或 If < 表达式 > Then < 语句 >
选择结构

2. If…Then…Else 语句
If 表达式 Then
语句块 1
Else
语句块 2
End If
或 If 表达式 Then 语句 1 Else 语句 2
选择结构

3. If…Then…ElseIf 语句
If 表达式 1 Then
语句块 1
ElseIf 表达式 2 Then
语句块 2

[Else
语句块 n+1]
End If
选择结构

 已知变量 ch 中存放了一个字符,判断该字符是字母字
符、数字字符还是其他字符。
选择结构

If 语句的嵌套是指 If 或 Else 后面的语句块中又包含 If 语


If 表达式 1 Then
If 表达式 2 Then

End If

End If

例 已知 x , y , z 三个数,使得 x>y>z
用一个 IF 语句和一个嵌套的 IF 语句实现
选择结构

Select Case 变量或表达式


Case 表达式列表 1
语句块 1
Case 表达式列表 2
语句块 2

[Case Else
语句块 n+1]
End Select

表达式列表与变量或表达式的类型必须相同,是下面 4 种形式之一

•表达式 例 : "A"
•一组用逗号分隔的枚举值 2,4,6,8
•表达式 1 To 表达式 2 60 To 100
条件函数

 (1) IIf 函数

IIf( 表达式,表达式为真时的值,表达式为假时的值 )

IIf 函数是 If … Then …Else 结构的简洁表示

例如,将 x , y 中大的数,放入 Tmax 变量中:

Tmax = IIf(x > y , x , y)

该语句与如下语句等价 :

If x > y Then Tmax = x Else Tmax = y


条件函数

 (2) Choose 函数

Choose( 整数表达式,选项列表 )

根据表达式的值 i, 返回选项列表中第 i 个选项。如果整


数表达式的值越出选项范围时,返回 Null 。

例 根据 NoP 的值,得到 + 、 - 、 × 、 ÷ 中的某运算


符:

OP= Choose(NoP , "+" , "-" , "×" , "÷")


循环结构

 Do 循环用于控制循环次数未知的循环结构。

形式 1 :

Do { While|Until }< 条件 >

语句块

[Exit Do

语句块 ]

LooP
退出和结束语句

1.Exit 语句
VB 中有多种形式的 Exit 语句,用于退出某种控
制结构的执行。 Exit 的形式如下:
Exit For 、 Exit Do 、
Exit Sub 、 Exit Function
2.End 语句
独立的 End 语句用于结束一个程序的运行,它
可以放在任何事件过程中。
随机产生 10 个 100 ~ 200 之间的
数,求最大值。

Dim x%, i%, max


x = Int(Rnd() * 101 + 100)
max = x
TextBox1.Text &= x & vbCrLf
For i = 1 To 9
x = Int(Rnd() * 101 + 100)
TextBox1.Text &= x & vbCrLf
If x > max Then max = x
Next i
TextBox1.Text &= " 最大值 =" & max & vbCrLf
For Each …Next

Dim strArray(4) As String


For Each strTemP As String In strArray
Messagebox.Show(strTemP)
Next

Dim strArray(4) As String


Dim strTemP As String
For Each strTemP In strArray
Messagebox.Show(strTemP)
Next
数组 - 一维数组

 创建数组的包括以下步骤:

(1) 声明一个数组类型的引用变量,简称数组变量。

(2) 用 new 关键字构造数组的实例, new 语句为数组分


配内存,并且为数组中的每个元素赋予默认值。

(3) 初始化,即为数组的每个元素设置合适的初始值。
数组 - 一维数组

 定义一维数组的语法格式如下:

Dim 数组名 ( 下标上界 ) [As 类型 ]

下标下界为 0 。一维数组的大小为:下标上界 +1 。

Dim a(10) As Integer , Dim st(5) As String

声明了一维整型数组 a 、有 11 个元素;下标的范围 0 ~
10 。

st 是一维字符串类型数组、有 6 个元素;下标的范围
0~5 。
声明和初始化数组的几种形式

Dim c(3) As Integer


★Dim c As Integer()
c = New Integer(3) {1,2,3,4}
★Dim c() As Integer
c = New Integer(3) {1,2,3,4}
★Dim c As Integer()
c = New Integer(3) {}
★Dim c As Integer() = New Integer() {1,2,3,4}
★Dim c() As Integer =() {1,2,3,4}
与数组有关的几个属性、方法

 数组长度

c.Length
 数组上界

c.GetUpperBound(0)

0 表示 1 维, 1 表示 2 维,依次类推
多维数组声明

 Dim 数组名 ( 下标 1 ,下标 2…) [As 类型 ]


 下标数决定了数组的维数,每一维的大小 = 上界 +1 ;
数组的大小为每一维大小的乘积。
 例 Dim x(2,4) As Long
 声明了一个长整型的二维数组 x ;共占据 3×5 个长
整型变量的空间
数组的初始化

Dim 数组 () As 类型 ={ 常数 1 ,…,常数 n} ’
一维
Dim 数组 ( , ) As 类型 ={{ 行 1 常数 } ,…,
{ 行 m 常数 }}
例 Dim x(,) As Integer = {{1,2,3,4},
{5,6,7,8}}
重定义数组大小

对已经存在的数组可用 ReDim 语句改变数组大小


ReDim 数组名 ( 下标 [, 下标 2…])
例 Dim sArray(2,3 ) As Single
Sub Form_Load( )

ReDim sArray(4 , 8)

End Sub
在过程外声明了二维数组 sArray ,在 Form1_Load 事件
中重新指明二维数组的大小为 5 行 9 列。
重定义数组大小注意:

 Dim 是说明语句,可出现在程序的任何地方,而
ReDim 是执行语句,只能出现在过程中
 在过程中可多次使用 ReDim 语句来改变数组的大小,
但不能改变维数和类型
 可在 ReDim 后加 Preserve 参数用来保留数组中的数据
,若使用 Preserve 参数后,只能改变最后一维的大小

交错数组

 多维数组只是数组,交错数组是数组的数组。
 交错数组:元素为数组的数组,元素的维度和大小可
以不同。
 多维数组:元素的维度和大小的均相同。
 与一维或多维数组不同 , 交错数组需要定义二个 ()
号 , 在不指定初始指的情况下 , 必须指定第一个下标
的个数 .
交错数组

 1 .交错数组的声明
 (1) 交错数组的元素为一维数组
 格式一: Dim 数组名 ( 下标上界 )()  As   数据类型
 例如, Dim arrA(3)() As String
 格式二: Dim 数组名 ()() As 数据类型 1= New 数
据类型 2( 下标上界 )(){}
 例如, Dim arrA()() As String=New string(3)()
{} ' 声明了包含四个元素的交错数组,而且四个元
素都是一维数组。
交错数组

 (2) 交错数组的元素为多维数组
 如果交错数组的元素为二维数组,声明格式为:
 格式一: Dim 数组名 ( 下标上界 )(,)  As 数据类型
 格式二: Dim 数组名 ()(,)  As 数据类型 1= New 数据类型 2( 下标上界 )(,)
{}
 例如,
 Dim arrA(,)   As Integer = {{1, 2, 3}, {4, 5, 6}} 'arrA 是 2 ×3
的二维数组
 Dim arrB(,)  As  Integer = {{1, 2}, {3, 4}, {5, 6},{7,8}} ' arrB 是
4 ×2 的二维数组
 Dim arrAB(1)(,) As Integer ' 定义包含 2 个元素的交错数组 arrAB
 arrAB(0) = arrA ' 交错数组第一个元素赋值为二维数组 arrA
 arrAB(1) = arrB '' 交错数组第二个元素赋值为二维数组 arrA
交错数组

 (2) 交错数组的元素为多维数组
 如果交错数组的元素为二维数组,声明格式为:
 格式一: Dim 数组名 ( 下标上界 )(,)  As 数据类型
 格式二: Dim 数组名 ()(,)  As 数据类型 1= New 数据类型 2( 下标上界 )(,)
{}
 例如,
 Dim arrA(,)   As Integer = {{1, 2, 3}, {4, 5, 6}} 'arrA 是 2 ×3
的二维数组
 Dim arrB(,)  As  Integer = {{1, 2}, {3, 4}, {5, 6},{7,8}} ' arrB 是
4 ×2 的二维数组
 Dim arrAB(1)(,) As Integer ' 定义包含 2 个元素的交错数组 arrAB
 arrAB(0) = arrA ' 交错数组第一个元素赋值为二维数组 arrA
 arrAB(1) = arrB '' 交错数组第二个元素赋值为二维数组 arrA
交错数组

 2 .交错数组的初始化
 与一般数组相同,可以在声明交错数组的同时进行初始化,例如

 Dim arrA()() As Integer={New Integer(){1,2,3},New
Integer(){4,5,6,7}}
 对由一维数组构成的交错数组初始化,注意大括号对中的 New
Integer() 不能省略。
 初始化时,也可以采用 New 子句,上述初始化语句可以改为:
 Dim  arrA()()  As  Integer=New  Integer(1)(){New  
Integer(){1,2,3},New Integer(){4,5,6,7}}
交错数组

 对由二维数组构成的交错数组初始化,可以采用以下几种格式:
 Dim arrAB()(,) As Integer = {New Integer(,){{1, 2},
{3, 4}}, New Integer(,){{5, 6}, {7, 8}, {9, 10}}}
 Dim arrAB()(,) As Integer = New Integer(1)(,){New
Integer(,){{1, 2}, {3, 4}}, New Integer(,) {{5, 6},
{7, 8}, {9, 10}}}
 Dim arrAB()(,) As Integer = New Integer()(,){New
Integer(,){{1, 2}, {3, 4}}, New Integer(,) {{5, 6},
{7, 8}, {9, 10}}}
System.Array

 System.Array 是所有数组类型的抽象基类。提供创建、
操作、搜索和排序数组的方法,因此所有数组都可以使
用它的属性和方法。

属性 说明
Length 获得一个 32 位整数,该整数表示 Array 的所有维数中元素的
总数。
LongLength 获得一个 64 位整数,该整数表示 Array 的所有维数中元素的
总数。
Rank 获取 Array 的秩(维数)。
方法 说明
BinarySearch 静态方法。使用二进制搜索算法在一维的排序 Array 中搜索值。
CoPy 静态方法。将一个 Array 的一部分元素复制到另一个 Array 中,并根据需要
执行类型强制转换和装箱。
CoPyTo 非静态方法。将当前一维 Array 的所有元素复制到指定的一维 Array 中。

Find 静态方法。搜索与指定谓词定义的条件匹配的元素,然后返回整个 Array 中


的第一个匹配项。
ForEach 静态方法。对指定数组的每个元素执行指定操作。
GetLength 非静态方法。获取一个 32 位整数,该整数表示 Array 的指定维中的元素数。

GetLongLength 非静态方法。获取一个 64 位整数,该整数表示 Array 的指定维中的元素数。

GetLowerBound 非静态方法。获取 Array 中指定维度的下限。


GetUPPerBound 非静态方法。获取 Array 的指定维度的上限。
GetValue 非静态方法。获取当前 Array 中指定元素的值。
IndexOf 静态方法。返回一维 Array 或部分 Array 中某个值第一个匹配项的索引。

Resize 静态方法。将数组的大小更改为指定的新大小。
Reverse 静态方法。反转一维 Array 或部分 Array 中元素的顺序。
SetValue 非静态方法。将当前 Array 中的指定元素设置为指定值。
Sort 静态方法。对一维 Array 对象中的元素进行排序。
结构类型

数组存放性质相同的数据集合。若不同类型信
息作为一个整体来描述,例如姓名、性别、出
生年月等,通过“ Structure” 结构类型来解
决。
1. 结构类型定义:
Structure 结构类型名
成员名声明
End Structure
结构类型

例如,定义一个有关学生信息的结构类型:
Structure studTyPe ' studTyPe 为类型名
Dim Name As String ' 姓名
Dim Sex As Char ' 性别
Dim TelePhone As Long ' 电话
Dim School As String ' 学校
End Structure
结构类型

定义了结构类型,就可在变量的声明时使用。
Dim 变量名 As 结构类型名
例如,如下语句:
Dim Student , MyStud As StudTyPe
声明 Student 、 MyStud 为两个同种类型的变

结构变量成员的引用

引用结构类型变量中的某个成员,形式如下:
结构类型变量名 . 成员名
例如, Student.Name Student 变量中的姓名
Student.Sex 性别
可利用 With 语句简化成员引用:
With 结构变量对象名
语句块
End With
枚举类型

语法:

Enum 类型名称

成员名 = 表达式(常量)

End Enum
命名空间

 在 .NET 中,类是通过命名空间( namesPace )来组织


的。命名空间提供了可以将类分成逻辑组的方法,将
系统中的大量类库有序地组织起来。
 可以将命名空间想像成文件夹,类的文件夹就是命名
空间,不同的命名空间内,可以定义许多类。在每个
命名空间下,所有的类都是“独立”且“唯一”的。
命名空间

 使用命名空间有两种方式,一种是明确指出命名空间
的位置,另一种是通过 ImPorts 关键字引用命名空间

 直接定位在应用程序中,任何一个命名空间都可以在
代码中直接使用。例如:
System.Console.WriteLine("ABC")
模块

 模块一般就是存放公用的一些方法 (Sub) 或者函数


(Function) 。
 模块里面的方法自动就是静态的(或者称为共享的
—— VB.NET 中的关键字是 Shared) ,这些方法可以直
接调用,所以 Module 是无法实例化,也没有必要实例
化的。
类和结构类型的差异

类 结构
引用类型 值类型
可 以 有 无 参 数 的 构 造 函 不能有无参数的构造函
数 数

创 建 对 象 必 须 用 new 关 创建对象可以不用 new


键字 关键字

可以能被继承 不能被继承
类的定义
[Public|Friend|NotInheritable|MustInherit] Class 类名
Dim … As …
Dim … As …

Public Sub …

End Sub

Public Sub …..

End Sub

End Class

69
Sub 过程

1 . Sub 过程的定义
定义一个 Sub 过程的一般格式是:
[Private | Public| Shared] Sub 过程名( [ 参数
表])
语句块
[Exit Sub]
End Sub

70
Sub 过程

说明:
 (1)Private 表示该过程是一个私有过程,只能被本模块(处于同一
个窗体模块或标准模块)中的其他过程所调用; Public 表示该过程
是一个公有过程,可以被程序中的所有模块调用; Shared 过程表示
该过程是一个静态过程,在静态过程中声明的变量均为静态变量。
 (2) 参数表的定义格式是:

[ByVal|ByRef] 变量名或数组名 ( ) [As 数据类型 ]

ByVal 表示参数按值传递, ByRef 表示参数按地址传递。


 (3)Exit Sub 语句使程序控制立即从一个 Sub 过程中退出,程序接着
从调用该 Sub 过程的语句之后的语句执行。
71
Sub 过程

2 . Sub 过程的调用
(1) 使用 Call 语句,其格式是:
Call 过程名([实参表])
(2) 直接使用过程名,并且实参之间不加括号。其格式是:
过程名 [实参表]

72
Sub 过程

下面的过程用来计算参数 n 的阶乘,过程名为 JieCheng1 。在


定义完该过程后,在一个命令按钮 Command1 的单击事件中调
用了该过程。
Public Class Form1
Sub JieCheng1(n As Integer)
Dim t As Long, i As Integer
t = 1
For i = 1 To n
t = t * i
Next i
MessageBox.Show(n.ToString() + "!=" +
t.ToString())
73
End Sub
Sub 过程

Private Sub Button1_Click(sender As Object, e As EventArgs)


Handles Button1.Click
Dim k As Integer
k = InPutBox(" 请输 入一 个 正整 数 ", " 计 算 阶 乘 ", "1")
If k > 0 Then
Call JieCheng1(k) ' 调 用 Sub 过 程
Else
MsgBox(" 输 入 数 据 错误 ", vbOKOnly, " 计 算 阶 乘 ")
End If
End Sub
74
End Class
Function 过程

1 . Function 过程的定义
定义一个 Function 过程的一般格式是:
[Private | Public|shared] Function 过程名 ([ 参数
表 ]) [As 返回值类型 ]
语句块
Return 表达式 或 函数名 = 表达式
[Exit Function]
End Function

75
变量的作用域

 块变量:在控制结构块中声明的变量,只能在本块内有效
 过程级变量:在一个过程内用 Dim 或 Static 语句声明的
变量,只能在本过程中使用
 模块级变量:在模块内、任何过程外用 Dim 、 Private
等语句声明的变量,可被本模块的任何过程访问
 全局变量:在模块级用 Public 语句声明的变量,可被应
用程序的任何过程或函数访问

76
变量的作用域

Public Pa As integer ' 全局变量

Private Mb As String ' 窗体 / 模块级变量

Sub F1( )

Dim Fa As integer ‘ 过程级变量

End Sub

Sub F2( )

Dim Fb As Single ‘ 过程级变量

For i=1 to 10

Dim k% ‘ 块变量

Next i

End Sub
77
静态变量

 静态变量:程序运行过程中可保留变量的值
 声明形式: Static 变量名 [AS 类型 ]
 用 Dim 声明的变量,每次调用过程时重新初始化
 比较 Dim 和 Static 两者的区别。

78

 类的成员
类的成员可以分为两大类:数据成员和函数成员

数据成员 说明
字段 字段存储类要满足其设计所需要的数据
,亦称为数据成员。
属性 属性是类中可以像类中的字段一样被访
问的方法。属性可以为类字段提供保护
,避免字段在对象不知道的情况下被更
改。
访问修饰符

 Private 当前类中可以访问 , 类中成员的默认访问修饰


符。
 Protected 当前类及子类中可以访问(在继承中用)
 Friend 当前程序集内部可以访问
 Protected Friend 当前程序集或子类中(不同程序集也
可以访问)。
 Public 任何地方
类的成员变量

 成员变量是指在类体中而非在方法中声明的变量,在方
法中声明的变量或方法的参数都是局部变量。成员变量
的声明方式如下: [Public|Protected|Private|
Shared|Friend|Protected Friend|Readonly] 变量名
AS 数据类型
只读字段

 可以在字段定义时使用 readonly  关键字来定义只读字


段。
 在定义只读字段时,可以在同一语句中给只读字段赋初
值,或者在该类的构造函数给只读字段赋值,其他地方
不能更改只读字段的值
Public ReadOnly RADIUS As Integer

Public Sub New(ByVal x As Integer)

RADIUS=x

End Sub
静态方法与静态变量

 静态变量
 使用 shared 修饰的字段称为静态变量。
 类中的静态变量仅分配一块存储区域。
 静态变量在整个程序运行期间都是存在的。
 静态方法
 使用 shared 声明的方法称为静态方法。
 静态方法只允许访问类的静态成员,而不允许访问其非静态成员
(即实例成员)。
 非静态方法可以访问类中的任何成员(包括静态成员和非静态成
员)。
静态方法与静态变量

 静态成员属于类成员,其访问形式为:

类名 . 静态成员名

静态成员名 (在本类的成员方法中)
构造函数

 构造函数是在创建给定类型的对象时执行的方法。性
质:
 构造函数的名称为 Sub New 。
 构造函数可以重载。
 当类对象声明时,调用哪一个构造函数取决于传递
给它的参数类型。
 构造函数不能被继承。
静态构造函数

 一个类只能有一个静态构造函数,该构造函数不能带
任何参数,不能直接调用,只能在 :
1 创建包含静态构造函数的类实例时
2 访问包含静态构造函数的静态成员时
 会先调用静态构造函数,无论创建了多少个类实例,
其静态构造函数都只调用了一次。
Me 关键字

 Me 在类中使用,是对当前实例的引用。当创建
该类的一个对象时,该对象隐含有一个 Me 引
用,其作用是引用当前正在操作的对象。
 Me 关键字用在方法、构造函数或属性中,用于
区分类的成员和本地变量或参数。
继承

 Inherits 关键字
 派生类继承了基类的成员和特征,但 Private 成员不
能继承。
 VB 不支持多重继承
派生类中成员的可访问性

 派生类全面继承基类中的成员。在派生类中不
能直接访问基类的私有( Private )成员,
但可通过继承自基类的公有( Public )属性
或公有方法对其私有成员进行操作。
Overrides 关键字

 Overrides 关键字提供从基类继承的成员的新实现。
通过 Overrides 声明重写的方法称为重写基方法。重
写的基方法必须与 Overrides 方法具有相同的签名。
 注意:不能重写非 Overridable 方法或静态方法。重
写的基方法必须是 Overridable 或 override 的。
方法隐藏和重写的区别

 方法隐藏:无论基类中的方法是否用了 Overridable
,继承类中都可以用 Shadows 关键字将基类中的方法
隐藏,隐藏是原来的还存在。所以当让基类的对象的
引用直接指向继承类的对象时(多态性),调用该方
法则是调用的基类的方法。
 方法重写:就是在基类中的方法用 Overridable 关键
字来标识,然后在继承类中对该类进行重写
( Override ),这样基类中的方法已经被重写了,已
经失去了功能了。当让基类的对象的引用直接指向继
承类的对象时(多态性),调用该方法则是调用的继
承类的方法。
派生类的构造函数执行顺序

 Object 类是所有类
的根,它有一个默
认的构造函数。
 基类的构造函数是
为其派生类对象继
承的基类实例变量
初始化。使用
MyBase 关键字调用
基类的构造方法。 先访问 C 的 构 造函 数 ;在 执 行 C 类构
造函 数 体之前,先 访问 B 的 构 造函 数 ,
 例如:实例化一个 C …, 先 访问 基 类 Object 的 构 造函 数 。接
类对象时,构造函 下 来 ,依次 执 行 object 类 的 构 造函 数 体
、 A 类 的 构 造函 数 体、 … , 最后 执 行
数的执行过程:
C 类 的 构 造函 数 体。
抽象类和最终类

 在类声明中使用 MustInherit 修饰符的类称为抽象类。


抽象类不能实例化。 MustInherit 只能用于 Class 语句

 在类声明中使用 NotInheritable 修饰符的类称为最终类
。最终类不能被继承。 NotInheritable 只能用于 Class
语句。
 NotOverridable :修饰符定义无法在派生类中重写的基
类的方法。所有方法都为 NotOverridable ,除非用
Overridable 修饰符进行标记。应用于
Function 、 Property 、 Sub
 MustOverride :修饰符定义的方法在基类中没有实现,
必须在派生类中实现。包含 MustOverride 方法的类必
须使用 MustInherit 进行标记。应用于
接口

 接口具有下列特性:
 接口类似于抽象基类。继承接口的任何非抽象类型
都必须实现接口的所有成员。
 不能直接实例化接口。
 接口不包含方法的实现。
 接口自身可从多个接口继承。
 接口也可以继承,一个接口可以从 1 到多个接口中
继承。即接口允许多继承。
异常

Try
[ tryStatements ]
[ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
[ catchStatements ]
[ Exit Try ] ]
[ Catch ... ]
[ Finally
[ finallyStatements ] ]
End Try
Try 语句

 Try 语句提供了捕获异常的机制。
 有三种使用的格式:
( 1 ) Try 后跟一个或多个 Catch 块语句。
( 2 ) Try 后跟一个 Finally 块语句。
( 3 ) Try 后跟一个或多个 Catch 块语句和一个
Finally 块语句。
异常

 ( 1 ) Catch 语句中异常类型,必须是
System.Exception 或其派生类。
 ( 2 ) Catch 中可以不指定异常类型和异常对
象名,表示捕获所有的异常类型,必须是 Try
块中最后一条 Catch 语句。
.NET 的 Exception 层次

 Exception 类是所有异常类的基类。每个异常必须用
一个 Exception 类或其派生类的实例表示。
 例如:
 DivideByZeroException 和 FormatException 都是
Exception 类的派生类。
 Exception 类中有一个只读属性 Message ,该属性用
来描述出现异常的信息。
.NET 的 Exception 层次
Throw 语句

 使用 Throw 语句可以主动抛出异常。
 格式如下:
Throw [ 异常对象 ]
 说明:
 省略异常对象时,该语句只能用在 Catch 语句中,用
于再次引发异常处理。
 带有异常对象时,则抛出指定的异常类。该异常既可
以是预定义的异常类,也可以是自定义的异常类。
 通过 Throw 抛出异常,使用 Catch 语句捕获。
用户定义异常类

 用户定义异常类需直接或间接继承 Exception 类。
集合

 数组从 Array 类继承了许多的属性和方法,使


得数组复制、排序、搜索等操作都比较便利。
但是使用数组元素时,会受到数组下标上界的
限制,要更改数组的大小,必须使用  ReDim
语句。而集合则不需要事先定义大小,可以根
据需要自动分配大小,可以随意添加、删除某
个元素。
集合

 1 .集合的类型
 .NET Framework 提供了许多常用的集合类型,这些类
隶属于不同名称空间。主要包括用于
System.Collections.Generic  、 System.Collecti
ons.Concurrent  和 System.Collections 。
 System.Collections 中的类不是将元素存储为指定类
型的对象,而是存储为 Object  类型的对象,所以,
能够存储任何数据类型的元素。
 System.Collections 名称空间提供了以下几个类,包
括 ArrayList 、  BitArray  、  Hashtable 等。
集合

 ArrayList :一个可变大小的数组,可以在其列表中
的任意位置增添或移除数据,而且一个 ArrayList 对
象可以存储不同种类型的数据。
 BitArray  :管理以位值存储的布尔数组。
 Hashtable :实现由键组织的值的集合( Key Value)
,排序是基于键的散列完成的(哈希函数)。
 Queue : 实现先进先出的集合(排序方式)。
 Stack  :实现后进先出的集合。
 SortedList :实现带有相关键的值的集合,该值按键
来排序,可以通过键或索引来访问。
集合

2 .创建与使用集合
在VB.NET 中,支持原 VB 的 collection  集合,  声明
格式:
Dim 集合名 As New Collection()
Dim 可以换成 Public 、 Static 。
对象集合可以目执行三种主要的操作,即添加(或插入)
,删除和查找:
Add 方法:向集合中增加项目;
Item 方法:通过索引或分健值返回一个项目;
Remove 方法:通过索引或键值从集合中删除一个项目。
除上述方法外,集合对象还有一个只读属性,即 Count ,
ArrayList

1 .创建 ArrayList 对象
格式一: Dim 变量名 As  New  ArrayList
格式二: Dim 变量名 As  ArrayList : 变量名 =New
ArrayList
例如: Dim  Arl  As  New  ArrayList 或
Dim Arl As ArrayList : Arl = New ArrayList
2 . ArrayList 的常用属性
(1)CaPacity : ArrayList 的容量  ,空集合容量为 0 ,非空集合容量
为 4,8,16......, 每次扩大 2 倍的方式递增。
(2)Count :获取  ArrayList  中实际包含的元素数。
(3)IsReadOnly :判断  ArrayList  是否为只读。
(4)Item( 索引 ) :获取或设置指定索引处的元素,索引是从零开始的
ArrayList

 ArrayList 用于建立可变长度的数组
格式一: Dim 变量名 As  New  ArrayList
格式二: Dim 变量名 As  ArrayList : 变量名
=New ArrayList
例如: Dim  Arl  As  New  ArrayList 或
Dim Arl As ArrayList : Arl = New ArrayList
属性 说明
CaPacity 获取或设置 ArrayList 可包含的元素数。
Count 获取 ArrayList 中实际包含的元素数。
Item 获取或设置指定索引处的元素。
方法 说明
Add 将对象添加到 ArrayList 的结尾处。
AddRange 将一个 ICollection 对象的元素添加到 ArrayList 的末尾。
Clear 从 ArrayList 中移除所有元素。
Clone 创建 ArrayList 的浅表副本。
Contains 确定某元素是否在 ArrayList 中。
CoPyTo 将 ArrayList 或它的一部分复制到一维数组中。
GetRange 返回 ArrayList ,它表示源 ArrayList 中元素的子集。
IndexOf 返回 ArrayList 或它的一部分中某个值的第一个匹配项的从零开始的索引。
Insert 将元素插入 ArrayList 的指定索引处。
InsertRange 将集合中的某个元素插入 ArrayList 的指定索引处。
LastIndexOf 返回 ArrayList 或它的一部分中某个值的最后一个匹配项的从零开始的索引。
Remove 从 ArrayList 中移除特定对象的第一个匹配项。
RemoveAt 移除 ArrayList 的指定索引处的元素。
RemoveRange 从 ArrayList 中移除一定范围的元素。
Reverse 将 ArrayList 或它的一部分中元素的顺序反转。
Sort 对 ArrayList 或它的一部分中的元素进行排序。
ToArray 将 ArrayList 的元素复制到新数组中。
ToString 返回表示当前 Object 的 String 。
Hashtable

 哈希表 Hashtable 类表示基于密钥的哈希码组织的键


- 值对的集合。 它使用键来访问集合中的元素。该
键用于访问集合中的项目。
Hashtable
List<T> 和 Dictionary<K,V>

 List(Of T) 类似于 ArrayList , ArrayList 的升级版



 各种方法: Sort() 、 Max() 、 Min() 、 Sum()…
 Dictionary(Of K,V) 类似于 Hashtable , Hashtable
的升级版。
HashSet

 HashSet 存储的是集合。集合内的元素是不能重复的

IO

 在 VB.NET 中可以通过 .NET 的 System.IO 模型以流的


方式对各种数据文件进行访问。
 System.IO 模型的实现包含在 System.IO 命名空间中
,该命名空间包含允许读写文件和数据流的类型以及
提供基本文件和文件夹支持的各种类。其中常用的类

IO
IO
IO
System.IO 命名空间中常用的类及其说明

类 说 明
BinaryReader 用特定的编码将基元数据类型读作二进制值

BinaryWriter 以二进制形式将基元类型写入流,并支持用特定的编码写入字符串

BufferedStream 给另一流上的读写操作添加一个缓冲层。无法继承此类

Directory 公开用于创建、移动和枚举通过目录和子目录的静态方法。无法继承
此类
DirectoryInfo 公开用于创建、移动和枚举目录和子目录的实例方法。无法继承此类

DriveInfo 提供对有关驱动器的信息的访问
File 提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创
建 FileStream 对象
FileInfo 提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建
FileStream 对象,无法继承此类
System.IO 命名空间中常用的类及其说明
FileStream 公开以文件为主的 Stream ,既支持同步读写操作,也支持异步
读写操作
Path 对包含文件或目录路径信息的 String 实例执行操作。这些操作
是以跨平台的方式执行
Stream 提供字节序列的一般视图
StreamReader 实现一个 TextReader ,使其以一种特定的编码从字节流中读取
字符
StreamWriter 实现一个 TextWriter ,使其以一种特定的编码向流中写入字符
StringReader 实现从字符串进行读取的 TextReader

StringWriter 实现一个用于将信息写入字符串的 TextWriter 。该信息存储在


基础 StringBuilder 中。
TextReader 表示可读取连续字符系列的读取器。
TextWriter 表示可以编写一个有序字符系列的编写器。该类为抽象类
Path

 对包含文件或目录路径信息的 String 实例执行操作



 Path 类的所有成员都是静态的,因此无需具有路径
的实例即可被调用。
File 和 FileInfo

 File 类提供了创建、删除、复制、移动文件的静态方

 FileInfo 类提供了创建、删除、复制、移动文件的实
例方法。
 OPen()
 Create()
 Delete()
 CoPy()
 Move
 Exist
Directory 和 Directoryinfo

 Directoryinfo 与 Directory 的功能类似,但


Directoryinfo 需要实例化使用。
 Exists :判断是否存在文件夹
 CreateDirectory :创建 c 文件夹
 GetCurrentDirectory() 获得当前目录
 GetFiles :获得当前目录下的文件名
 Move :移动文件夹, Directory.Move("d:\\a",
"d:\\c\\f\\"); 移动文件夹,把 d 盘下的 a 文件夹移
到 d:\c 文件夹下并重命名为 f, 要求 a 文件夹存在,
并 c 文件夹不存在 f 文件夹
StreamReader

 StreamReader- 读取标准文本文件的各行信息
 创建 StreamReader 对象,可指定带有路径的文件名。
StreamReader 类中常用的方法: 
 Read 方法 从文件(流)中读入下一个字符
 ReadLine 方法 从文件(流)中读入下一行字符
 Close 方法 关闭打开的文件(流)
 ReadToEnd 方法 从文件(流)的当前位置读到文件(流)的结

 Peek 方法 返回文件(流)中的下一个字符,但并不读入该字

StreamWriter

 使用 StreamWriter 对象,可以将数据写入文本文件,如果所指
定的文件不存在,则可以创建一个新文件。
swFile = New StreamWriter(“C:\\MyFile.txt” );
swFile = New StreamWriter("f:\aa.txt", True) ;
 第一个语句,打开文件 MyFile.txt 准备向该文件写入。
 第二个语句中除了路径参数外,还有一个 Boolean 型的变量作为
第二个参数。在文件已经存在的情况下,该参数如果为 True ,
则新写入的数据被追加到文件尾;否则新数据将覆盖旧数据。如
果文件不存在则创建新文件。
StreamWriter

核心的方法有: 
Write 方法 –向文件中写入一个字符串。
WriteLine 方法 - 向文件中写入一个字符串和一个换行符。
Close 方法 - 释放 StreamWriter 对象,并关闭打开的文件。
FileStream

 Filestream- 文件流类
 使用 Filestream 对象打开(或创建)文件。它的构造
函数比较常用的形式如下: 
 Dim fStream As
FileStream(Path,fileMode,fileAccess)
 参数说明:
 Path 要包含文件的路径以及文件名;
 fileMode 是枚举类型,其成员如表所示;
 fileAccess 是枚举类型,包含的属性有 Read ( 只
读 ) 、 ReadWrite( 读写 ) 、 and Write( 写操作 ) 。
FileMode 枚举成员

 FileMode 枚举有几个成员,规定了如何打开或创建文
件     员
成 文 件 存 在 文件不存在
APPend 打开文件,流指向文件的 创建一个新文件。只能与
末尾,只能与枚举 枚举 FileAccess.Write 联合使
FileAccess.Write 联合使用 用
Create 删除该文件,然后创建新 创建新文件
文件
CreateNew 抛出异常 创建新文件

OPen 打开现有的文件,流指向 抛出异常


文件的开头
OPenOrCr 打开文件,流指向文件的 创建新文件
eate 开头
Truncate 打开现有文件,清除其内 抛出异常
容。流指向文件的开头,保
留文件的初始创建日期
FileAccess 枚举成员

 FileAccess 枚举的一个成员,它指定了流的作用。
成     员 说      明
Read 打开文件,用于只读

Write 打开文件,用于只写

ReadWrite 打开文件,用于读写
FileStream-Read 和 Write 方法

Public Overrides Sub Write(array() As Byte, offset As Integer,


count As Integer)
Public Overrides Function Read(array() As Byte, offset As
Integer, count As Integer) As Integer

Read 和 Write 方法格式相似具有一样的 3 个参数,分别



 byte 型数组,存放准备写入文件流的数据( Write
中),或是从文件流中读出的数据( Read 中)
 offset 准备从数组中向文件写入或读出的数据在
数组中的位置
 count 写入或读出的最大字节数。
此外, Write 方法是 void 型的,没有返回值。而 Read
FileStream- 其他方法

  成员名称 说明
Seek 将该流的读写位置设置为定值
Flush 清除该流的所有缓存区,将所有缓存区的数据写入设备中
Close 关闭文件并释放与该文件流相关的任何资源
委托

 委托是一个可以引用方法的对象,当创建一个委托,
也就创建一个引用方法的对象,进而就可以调用那个
方法。
 委托是一种数据类型。被委托的对象是方法,解决的
问题就是如何将方法作为一个参数进行传递。
委托

 1 、定义委托类型
[ 访问修饰符 ]delegate 返回类型 委托名(形参);
 2 、声明委托对象
委托名 委托实例名;
 3 、创建委托对象(确定与哪些方法进行绑定)
委托实例名 =new 委托名(某个类的方法)
 4 、使用委托调用方法
委托实例名(实参)
委托

 委托注意事项:
1 、委托和方法必须具有相同的参数。
2 、委托可以调用多个方法,即一个委托对象可以维护一
个可调用方法的列表而不是单独的一个方法,称为多
路广播(多播)。
3 、使用 += 和 -= 运算实现方法的增加和减少
委托

 写法:
1 、委托 委托名 =new 委托(会调用的方法名 ); 委托名(参
数) ;
2 、委托 委托名 = 会调用的方法名 ; 委托名(参数);
3 、匿名方法
委托 委托名 =delegate( 参数) { 会调用的方法体 }; 委托名(参
数);
4 、拉姆达表达式
委托 委托名 = ((参数 1 ,。。参数 n ) =>{ 会调用的方法体 } )
;委托名(参数);
5 、用 Action<T> 和 Func<T>, 第一个无返回值
Func< 参数 1, 参数 2, 返回值 > 委托名 = (( 参数 1 ,参数 2)
序列化

 序列化目的是以某种存储形成使自定义对象持久化,
或者将这种对象从一个地方传输到另一个地方。
 转换成不同的格式就叫做不同的序列化,比如 xml 格
式,叫做 xml 序列化。 JavaScript 的 json 格式,叫
做 JavaScript 序列化。转换成二进制 byte[] 字节,
叫做二进制序列化。
JavaScript 序列化

 BinaryFormatter 进行二进制序列化。
 一个类要进行二进制序列化必须标识 Serializable ,
可以用 NonSerializable 表示类或属性不能被序列化

[Serializable]
public class ClassToSerialize
{
public int id = 100;
public string name = "Name";
[NonSerialized]
public string Sex = " 男 ";
}
String 和 Stringbuilder

 分别代表字符串常量和字符串变量
 String 类型是一个引用类型,但是 String 对象还有一个重要特
点,那就是一个字符串一旦被创建,就不能修改。每次使用
System.String 类中的方法时,都要在内存中创建一个新的字
符串对象,这就需要为该新对象分配新的空间。在需要对字符串
执行重复修改的情况下,与创建新的 String 对象相关的系统
开销可能会非常大。
 如果要修改字符串而不创建新的对象,则可以使用
StringBuilder 类。例如,当在一个循环中将许多字符串连接
在一起时,使用 StringBuilder 类可以提升性能。
Windows 窗体

 Windows 窗体提供了定义窗体外观的属性、定义行为的方法和定
义与用户交互的事件
 Windows 窗体是从 Form 类派生而来的控件
 事件处理:事件处理是 Windows 程序设计的基础,包括鼠标事件
、键事件和焦点事件等。
 应用程序有单文档界面( SDI )、多文档界面( MDI )或 Web 样
式的界面 3 种主要的形式
常用事件

 窗体的常用事件有
 Activated :激活窗体时发生
 FormClosed :关闭窗体后发生
 FormClosing :关闭窗体时发生
 Load :加载窗体时发生
 当一个窗体启动时,执行事件过程的次序如下
本窗体上的 Load 事件过程
本窗体上的 Activated 事件过程
本窗体上的其他 Form 级事件过程
本窗体上包含对象的相应事件过程
 一个窗体被卸载时,执行事件过程的次序如下
本窗体上的 FormClosing 事件过程
本窗体上的 FormClosed 事件过程
常用事件

 除了事件响应方法之外,窗体还有如下的一些常用方法
 Activate :激活窗体并给予焦点
 Close :关闭窗体
 Focus :使窗体获得焦点
 Hide :隐藏窗体
 Show :按照无模式窗体样式显示窗体
 ShowDialog :按照模式窗体样式显示窗体
Label, TextBox 和 Button 控件

 Label 控件属于文本标签控件,用来显示透明底色而用户无法直
接编辑的文字。
 TextBox 控件即文本框,显示设计时输入的文本。
 Button 控件即按钮控件,常用于启动、停止或中断进程。
 CheckListBox 控件
 ComboBox 控件
 DateTimePicker 控件
 ListBox 控件
 MenuStriP 控件
 ToolStriP 控件
 StatusStriP 控件
Label, TextBox 和 Button 控件

 TreeView 控件
 ListView 控件
 SPlitContainer 控件
控件共有属性

 大多数控件共有的基本属性如下
Name 属性
Text 属性
尺寸大小( Size )属性
位置( Location )属性
字体属性( Font )
颜色属性( BackColor 和 ForeColor )
可见( Visible )属性
有效( Enabled )属性
Cursor 属性
控件共有属性

 大多数控件共有的基本属性如下
Name 属性
Text 属性
尺寸大小( Size )属性
位置( Location )属性
字体属性( Font )
颜色属性( BackColor 和 ForeColor )
可见( Visible )属性
有效( Enabled )属性
Cursor 属性
打开和保存文件对话框

 OPenFileDialog dlg = new OPenFileDialog();


 dlg.ShowDialog();
Datetime

属性
Date :返回一个 DateTime 值,显示日期。
Day :返回一个 DateTime 值,显示一个月中的某日。
DayOfWeek :返回一个 DateTime 值,显示星期几。
DayOfYear :返回一个 DateTime 值,显示一年中的某日。
Hour :返回一个 DateTime 值,显示时。
Millisecond :返回一个 DateTime 值,显示毫秒。
Minute :返回一个 DateTime 数值,显示分。
Month :返回一个 DateTime 值,显示月份。
Now :返回一个 DateTime 值,显示当前机器上的日期和时间。
Datetime

 Second :返回一个 DateTime 值,显示秒。


 TimeOfDay :返回一个 DateTime 值,显示当日时间。
 Today :返回系统当前日期。
 UtcNow :返回一个 DateTime 值,显示以协调世界时( UTC )表
示的本机上的日期和时间。
 Year :返回一个 DateTime 值,显示年份。
Datetime

方法
Add :将指定的 TimeSpan 值和 DateTime 值相加。
AddDays : DateTime 值加上指定的天数。
AddHours : DateTime 值加上指定的小时数。
AddMilliseconds : DateTime 值加上指定的毫秒数。
AddMinutes : DateTime 值加上指定的分钟数。
AddMonths : DateTime 值加上指定的月数。
AddSeconds : DateTime 值加上指定的秒数。
AddYears : DateTime 值加上指定的年数。
DaysInMonth :返回指定的某一年某个月的天数。
Datetime

 IsLeapYear :返回指出知道的年份是否是闰年。
 Subtract : DateTime 值减去指定的时间或时间段。
 ToLocalTime :将当前的协调世界时间转换成当地时间。
 ToLongDateString :将该实例值转换成等值的长日期字符串表
示法。
 ToLongTimeString :将该实例值转换成等值的长时间字符串表
示法。
 ToShortDateString :将该实例值转换成等值的短日期字符串表
示法。
 ToShortTimeString :将该实例值转换成等值的短时间字符串表
示法。

You might also like