微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

重拾VB611:再论数据类型

来自MSDN-2001-OCT: Visual Tools and Languages/Visual Studio 6.0 Documentation/Visual Basic Documentation/Using Visual Basic/Programmer’s Guide/Part 2: What Can You Do With Visual Basic/More About Programming

一、创建自己的数据类型

(1)注意 假如声明了使用Dim 关键字,标准或类模块中的用户自定义类型将缺省为公有的。假如您希望自定义类型为私有的,确保您用Private 关键字将其声明为私有。在窗体模块里用户定义类型只能声明为私有的。

(2)如果两个变量都属于同一个用户定义类型,也可以将其中一个变量赋给另一个变量。这种赋值是将一个变量的所有元素赋给另一个变量的对应元素。YourSystem = MySystem

(3)可以使用用户定义类型传递过程参数。注意 如果要传递窗体或类模块中的用户定义类型,则过程必须是私有的。用户定义类型总是通过引用传递,所以被调用过程可以修改参数并将其返回到调用过程中。注意 由于用户定义的类型总是由引用来传递的,包含在用户定义类型中的所有数据都将传递到过程并从过程中返回。对于包含大数组的用户定义类型,这将会导致较差的性能,特别是在客户/服务器应用程序中,在客户/服务器应用程序中,过程可能运行在一个远程机器上。在这种情况下,最好只将必要的数据从用户定义类型中抽取并传递。

(4)用户定义类型也可以包含对象。提示 因为 Variant 数据类型能存储许多不同类型的数据,所以当希望使用用户定义类型时,在许多情况下也可以使用 Variant 数组。实际上,Variant 数组比用户定义类型更灵活,因为存储在每个元素中的数据的类型可以随时改变,而且还可以将数组定义为动态的,必要时可以改变其大小。但是,Variant 数组使用的内存总是要多于相当的用户定义类型。

(5)用户定义类型可以包含其他的用户定义类型。为了保证代码的可读性和易于调试,应尽量将定义用户定义数据类型的所有代码限制在一个模块的范围内。

二、通过枚举使用常数集进行工作

(1)枚举可以通过在标准模块或公用类模块中的声明部分用 Enum 语句声明一个枚举类型来创建。

(2)在缺省情况下,在枚举中的第一个常数被初始化为 0,其后的常数则初始化为比其前面的常数大 1 的数值。

(3)Visual Basic 提供了内置的枚举 vbDayOfWeek,包括了与星期的七天相对应的常数。

(4)可以使用赋值语句显式地给枚举中的常数赋值。可以赋值为任何长整数包括负数。

(5)注意 Visual Basic 将枚举中的常数数值看作长整数。如果将一个浮点数值赋给一个枚举中的常数,Visual Basic 会将该数值取整为最接近的长整数

(6)当引用单个常数时,为了避免模糊引用,应在常数名称前冠以枚举名。

Debug . Print "Days.Saturday = " & Days . Saturday
Debug . Print "WorkDays.Saturday = " & WorkDays . Saturday

(7)当向一个枚举中的常数赋值时,也可以使用另一个枚举中的常数的数值。

Public Enum WorkDays
Sunday = 0
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday = Days . Saturday - 6
Invalid = - 1
End Enum

(8)声明枚举类型后,就可以声明该枚举类型的变量,然后使用该变量存储枚举常数的数值。

注意 尽管通常只将枚举常数数值赋给枚举类型的变量,但也可以将任何长整数数值赋给该变量。当对与枚举常数不相关联的变量赋值时,Visual Basic 不会产生错误

三、数组的高级功能

3.1 数组赋值

(1)将一个数组赋给另外一个数组:

Sub Bytecopy( oldcopy() As Byte , newcopy() As Byte)
newcopy = oldcopy
End Sub

(2)给维数和/或数据类型不同的数组赋值的尝试,可能成功,也可能失败。错误可能发生在编译时,也可能发生在运行时(例如,如果数据类型不能强制转换或赋值试图重新声明 (ReDim) 一个固定大小的数组)。作为程序员,其任务就是添加错误处理以确保数组在赋值之前是相容的。

3.2 从函数返回数组

(1)数组的数据类型必须和函数的数据类型相同(在本例中是字节)。因为这是一个函数调用,传递数组时不必带括号。注意 尽管可以通过赋值给另一个数组(ArrayFunction = x())来返回一个数组,但出于性能方面的考虑,并不推荐使用这种方法

Public Function ArrayFunction(b As Byte) As Byte()
Dim x( 2) As Byte
x( 0) = b
x( 1) = b + CByte( 200)
x( 2) = b + b
ArrayFunction = x
End Function

Dim ReturnArray() As Byte
ReturnArray() = ArrayFunction(b)

(2)当调用一个返回数组的函数时,用来保存返回值的变量也必须是一个数组,而且其数据类型必须和函数相同,否则将显示一个“类型不匹配”的错误

四、用集合替代数组

在某些情况下,将项目存储在集合中可能比存储在数组中效率更高。如果处理较小的、动态的项目集时,可能希望使用集合。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 -------------------------------- 数字类型的格式化 --------------------------------     固定格式参数:     General Number 普通数字,如可以用来去掉千位分隔号     format$("100,1
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和系统设置的区域语言的日期和时间格式相关。意思是尽管你用诸如 Format(Now, "MM/dd/yyyy"),如果系统的设置格式区域语言的日期和时间格式分隔符是"-",那他还会显示为 MM-dd-yyyy     只有拼凑: <%response.write
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接添加本ApplicationEvents.vb 到工程即可 ‘添加后还需要一个From用来显示错误。如果到这步还不会则需要先打好基础啦 ‘======================================================== ‘以下事件
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没有认真去找这个方法呀。 https://blog.csdn.net/chzjxgd/article/details/6176325 金蝶K3 BOS的插件官方是用VB6编写的,如果  能用.Net下的语言工具开发BOS插件是一件很愉快的事情,其中缘由不言而喻,而本文则是个人首创,实现在了用V
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) 2 Dim path As String, hash As String 3 For Each fil
  Imports MySql.Data.MySqlClient Public Class Form1 ‘ GLOBAL DECLARATIONS Dim conString As String = "Server=localhost;Database=net2;Uid=root;Pwd=123456;" Dim con As New MySqlConnection
‘導入命名空間 Imports ADODB Imports Microsoft.Office.Interop   Private Sub A1() Dim Sql As String Dim Cnn As New ADODB.Connection Dim Rs As New ADODB.Recordset Dim S As String   S = "Provider=OraOLEDB.Oracl
Imports System.IO Imports System.Threading Imports System.Diagnostics Public Class Form1 Dim A(254) As String    Function ping(ByVal IP As Integer) As String Dim IPAddress As String IPAddress = "10.0.
VB运行EXE程序,并等待其运行结束 参考:https://blog.csdn.net/useway/article/details/5494084 Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Pr