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

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

概述.net提供数千个类。类创建的对象就是引用类型。 1、Object类        Object是.net中每个类型的基类(包括值类型和引用类型),本质上,每个变量都是一个对象,都可作对象处理。        故,任意变量可转换为Object:引用类型-维护引用及实现代码,但会作一般类型处理;值类型-会从栈上提取,放于Object相关内存处。        自定义类创建的ToString()方法,

.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 FunctionEnd Class
总结

以上是内存溢出为你收集整理的VB.net学习笔记(五)数据类型-引用类型(类)全部内容,希望文章能够帮你解决VB.net学习笔记(五)数据类型-引用类型(类)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1278161.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存