VB.net学习笔记(五)数据类型-引用类型(类)

前端之家收集整理的这篇文章主要介绍了VB.net学习笔记(五)数据类型-引用类型(类)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

.net提供数千个类。类创建的对象就是引用类型。



1、Object类

Object是.net中每个类型的基类(包括值类型和引用类型),本质上,每个变量都是一个对象,都可作对象处理。

故,任意变量可转换为Object:引用类型-维护引用及实现代码,但会作一般类型处理;值类型-会从栈上提取,放于Object相关内存处。

自定义类创建的ToString()方法,在实例被强制转换成Objec类型时,也会调用定制的ToString方法

例:定义对象

        Dim a As Object
        a = Me
        CType(a,Form).Text = "本窗体的标题显示在这里"  'Form作类型





2、String类

基本类型中唯一的引用类型,带有很共享处理方法,在一个字串变量后加点后会引出很多方法


(1)String()方法

String类的构造函数有多个。String()是默认的构造函数

下面都是构造字串的方法

        Dim a As String = "ABC"
        Dim b = "ABC"
        Dim c As String = New String("A"c,23) '重复23次字符A
        Dim d = New String("+"c,33)

Stirng类的共享方法多个,如:

Empty 属性,空串,用于比较或初始化;

Compare 比较两字串

CompareOrdinal 比较两字串(不考虑本国语言或文化)

Concat 字串连接

Copy 利用实例创建新的字串(复制)

Equals 判断两字串是否相同

IsNullorEmpty 高效地判断字串是空串还是Nothing


(2)SubString方法

SubString是对一个字串提取出子串的方法。有两个方式,如:

        Dim a As String = New String("Hello World")
        TextBox1.Text = a.Substring(0,5) '字串首开始,长度5,即Hello
        TextBox1.Text = a.Substring(6) '位置6开始(W),至末尾的字串



(3)PadLeft、PadRight

左、右对齐字串。即在哪边以什么字符进行填充,达到左右对齐的效果,如:






(4)String.Split方法

字串被字符字符(组)分隔成一个子字串数组。如:

a.Split("a"c,"b"c) '以分隔符a,b分隔

a.split(d) '以数组d数组来分隔。

故分隔符可是单个也可是多个





(5)String类的不可变

String类被定义为不可变的类,若对字符串进行改变或复制时,系统将分配新的内存空间来存储(原空间被回收机制回收)。

因为每一次变动字串,就意味着它会重新分配内存空间进行放置,如惊弓之鸟一样随时换巢,分配空间意味着花费更多时间。

例:下面每追加一个字串,就分配一下,所以时间长


为了克服这个毛病,可以用.net库中的System.Text.StringBuilder类,它类似一个先分配一个较的内存,尽管当前字串并

没有占满它,为后加编辑字串提供容纳空间,只有当无法容纳时,再次较大地扩大这个内存。这个就大大减轻了每一次都

要分配的负担。

例:可以看到StringBuider所花时间很少





(6)字串常量

Microsoft.VisualBasic.Contants类提供了一些常量。比如Contants.vbCrLf,以方便处理常用的一些常量字串






3、XML字面量

正如与Http源代码一样,除了带节点<>的显示字串,还显示包括在内部”的字串。

另外还有嵌入一些变量字串,以显示变量的字串值如:<%=myString %>






4、DBNULL类与IsDBNULL()函数

数据库中有数据类型,但为NULL,为了适应这个,定制这个来判断其值







5、参数传递

参数的传递除了值传递、引用传递特性外,还有其它的特性。

(1)默认参数。

private function add2(byval a as int32,optional byval b as char="d"c)

加optional表示默认参数,可选,可以省略(其值为默认值)。

默认参数只能在参数列表最后


(2)ParamArray 参数数组

参数数组。一个参数只能传递一个值,为了传递多个值而不至于写多个参数,于是用ParamArray来指明传递的是一个数组(多个参数)

而且ParamArray还有一个妙用,尽管传递的不是一个数组,函数会根据传参把多个参数“当作一个数组”。

ParamArray只能在参数列表的最后一个参数。

注意下面与optional的位置

optional byval

byval paramArray

    Private Sub Button1_Click(sender As Object,e As EventArgs) Handles Button1.Click
        Dim a As Int32() = {1,2,3,4,5}
        TextBox1.Text = add2(a)
    End Sub
    Private Function add2(ByVal ParamArray c() As Int32) As Int32
        Dim i As Int32
        Dim temp As Int32 = 0
        For Each i In c
            temp += i
        Next
        Return temp
    End Function

上面可以用add2(5,7,9,10),函数自动把这几个数组当作一个数组来看待,而不一定非得用数组变量(上例a)

这就是为什么ParamArray参数只能为最后一个参数的原因(不这样的话,容易把其它参数也作用了数组参数中的一员)


ParamArray不能与Optional一起使用。
同样,ParamArray不能与ByRef一起使用。但它可以与ByVal一起使用。如上例。
最好是ParamArray的前面不加修饰,这样好记忆







6、变量的作用域

.net的作用域有4种,作用域定义了每一个变量的生存期和优先级。

当变量不再处于作用域时,垃圾回收器就可以回收它了。

原则:小的作用域比较大的作用域更具优先级,即两作用域重叠时,先用较小的作用域。


(1)全局作用域 : 存在于整个程序运行期间,优先级最低。

(2)类级或模块级作用域:存在于类或模块生存期间,当类被删除时,变量也就不存在了。

当与全局作用域重叠时,全局作用域变量暂时“不可见”,类级变量作用域生效。

(3)方法作用域: 即sub,function等作用域(如里面的参数。)

(4)块级作用域:在某个程序语句块中声明的。比如在if...then或For each的语句块中声明的循环变量,出了循环块就失效。

Dim i As Int32  '全局作用域
Public Class Form1
    Dim i As Int32  '类作用域 
    Private Sub Button1_Click(sender As Object,5}
        TextBox1.Text = add2(a)
    End Sub
    Private Function add2(ByVal ParamArray c() As Int32) As Int32 '参数,方法作用域
        Dim temp As Int32 = 0
        For Each i As Int32 In c 'i是块作用域
            temp += i
        Next
        Return temp
    End Function
End Class

猜你在找的VB相关文章