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

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

VB.net学习笔记(五)数据类型-引用类型(类)_第1张图片





            (4)String.Split方法

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

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

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

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





               (5)String类的不可变

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

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

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

VB.net学习笔记(五)数据类型-引用类型(类)_第2张图片

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

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

                要分配的负担。

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

VB.net学习笔记(五)数据类型-引用类型(类)_第3张图片




             (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, 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 temp As Int32 = 0
        For Each i As Int32 In c 'i是块作用域
            temp += i
        Next
        Return temp
    End Function
End Class



你可能感兴趣的:(VB.net学习)