vb.net的关键字和结构体

时间:2021-07-19 13:40:16

vb.net中
Sub过程中没有返回值
function函数有返回值

Sub语句用于声明子过程的名称,参数和主体

语法是:

[Modifiers]Sub SubName[(ParameterList)]
    [Statements]
End Sub

*Modifiers修饰符:指定过程的访问级别;可能的值有:Public,Private,Protected,Friend,Protected Friend and information regarding overloading,overriding,sharing,and
shadowing
*ParameterList参数列表:指定参数的列表

默认值为:public

  • public:类以外的代码也可以访问–> 公用,同一项目中任意位置的代码,引用该项目的其他项目,以及由该项目生成的任何序集
  • protected friend:在当前项目和本类的派生类中可用–》派生类或同一程序集内,或两者皆可
  • protected:在本类和本类的派生类中可用–》保护
  • private:只在当前类中可用 –》私有,仅可以从同一模块、类或结构内访问元素
  • Friend:只在当前项目中可用 –》友元,从同一个程序集内部访问元素,而不能从程序集外部访问

程序集可以理解为一个项目就是一个程序集,VS支持一个解决方案有多个项目(当前理解为是一个.vb文件)

Structure:结构

结构和类的相同之处:都含有成员,包括构造函数、方法、属性、字段、常亮、枚举和事件,都可以实现接口,都有共享的构造函数,都能对成员进行封装

Module Module1 '/模块module声明
    Private Structure test  '/定义了一个名为test的结构
        dim Name AS String
        public Sub New (ByBVal Name1)
        Name=Name1
        End sub
    End Structure
    Sub Main()
        Dim A As New test; 通过系统默认自带的构造方法实例化结构体test
        Dim B As New test("xiaoming");
    End Sub
End Module

Byval是值传递,传进来的是值的副本,过程并不会改变原本值的数据
ByRef是地址传递,传进来的是该值的地址,过程会修改原本值的数据

vb.net是完全面向对象的,所以每个程序必须包含一个类或模块,该类或模块包含使用的数据和过程。
类或模块通常将包含多个过程。过程包含可执行代码,这些可执行代码定义了类的行为。
过程可以是下面任何一种:

功能:Function
子 :Sub

Function过程和Sub过程的区别是Function过程有返回值,Sub过程无返回值

运算符:Operator
获得:Get
组:Set
Addhandler
RemoveHandler
.RaiseEvent

结构和类的区别:结构(Structure)是值类型,类(Class)是引用类型。因此,结构使用堆栈分配,类使用堆(托管堆)分配
类作为引用类型,是存储在堆上,只能通过引用地址来访问他们 ,不能直接访问。
不管定义多少个class类型的变量,只要不实例化,(Dim classb AS classtest =classa ),它们都只是在堆栈上划分各自的空间,来存储class对象的引用地址,而这每个不同名称的引用地址都指向同一个引用对象的实际值,所以,不管哪个class类型变量改变了值,它都会影响原始值。
结构是直接存储在堆栈上,要么在数组中,要么在另一个类型中,当包含结构实例的位置被销毁时,结构实例也会被销毁。
所有结构成员都默认为public,而类的变量和常量默认为private。其他的类成员默认为public
结构成员不能声明为protected,而类成员可以。
结构过程不能处理事件,类过程可以
结构变量声明不能指定初始值、new关键字或数组初始大小,类变量声明可以。
结构不可被继承

ReDim和 Dim的区别
dim 为定义一个变量
Redim为重新定义这个变量,Redim一般用于对数组的重新定义。重新定义后会丢失所有数据
ReDim 语句
在过程级中声明动态数组变量并分配或重新分配存储空间。
ReDim [Preserve] varname(subscripts) [, varname(subscripts)]
发现Dim语句时,则自动根据语句中的指定生成一个或几个新变量,即在内存中保留一些空间并为其取名,生成占位符

Dim用于模块,类,结构,过程或块级别
声明变量的语法是:

[<attributelist>] [accessmodifier] [[Shared][Shadows]|[Static]]
[ReadOnly] Dim [WithEvents] variablelist
  • attributelist:是适用于变量的属性列表
  • accessmodifier:定义变量的访问级别。(public等)
  • shared(共享):声明一个共享变量,它不与类或结构的任何特定实例相关联,而是可用于类过结构的所有实例。(等同java中的static)
  • Shodows(阴影):表示变量在基类中重新声明和隐藏一个同名的元素或一组重载的元素。
  • static:表示变量将保留其值,即使在声明它的过程终止之后
  • ReadOnly:表示变量可以读取,但不能写入
  • WithEvents:指定该变量用于响应分配给变量的实例引发的事件
  • Variablelist:提供了声明的变量列表

变量列表中的每个变量具有以下语法和部分

variablename[([boundslist])][As [New] datatype] [=initializer]
  • variablename:变量名字
  • boundslist:它提供了数组变量的每个维度的边界列表
  • New:当Dim语句运行时,它创建一个类的新实例
  • dataType:如果Option strict为On。则为必须。它指定变量的数据类型
  • initializer:如果未指定为New,则为可选。创建时评估并分配给变量的表达式

vb.net中的Option Strict 和 Option Explicit

Option Explicit语句决定编译器是否要求所有的变量被显式的声明
Option Strict 如果选择为On,则编辑器运行放宽的隐式类型转换。如果为Off,则编译器是不仅允许方块的类型转换,而且允许缩窄的类型转换。缩窄的类型转换容易发生数据丢失或是不正确的结果。
*Strict:严格

如果Option Explict为Off时,变量可以不被显式的声明。

Public const age=10   '/此时数值整数文本转换为Integer数据类型。 
public const hight=165.5  '/浮点数的默认数据类型是Double