VB中preserve的用法
注:本文转载自:http://zhidao.baidu.com/question/161401549.html
ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的 Private、Public 或 Dim 语句声明过的动态数组的大小。
可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用 ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。如果该数组确实是包含在某个 Variant 中,且没有使用 Preserve 关键字,则可以使用 As type 子句来改变其元素的类型,但在使用了此关键字的情况下,是不允许改变任何数据类型的。
如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。
ReDim X(10, 10, 10) . . . ReDim Preserve X(10, 10, 15)
同样地,在使用 Preserve 时,只能通过改变上界来改变数组的大小;改变下界则会导致错误。
如果将数组改小,则被删除的元素中的数据就会丢失。如果按地址将数组传递给某个过程,那么不要在该过程内重定义该数组的各维的大小。
在初始化变量时,数值变量被初始化为 0,变长的字符串被初始化为一个零长度的字符串 (""),而定长的字符串则用 0 填充。Variant 变量被初始化为 Empty。用户自定义类型的变量的每个元素作为各自独立的变量进行初始化。在使用引用对象的变量之前,必须使用 Set 语句将一个已有的对象赋给该变量。在被赋值之前,所声明的对象变量有一个特定值 Nothing,这个值表示该变量没有指向任何对象的实例。
小心 如果 ReDim 语句所使用的变量在模块级别或过程级别不存在,则该语句就相当于一个声明语句。如果此后在一个更广的范围内又创建了同名的变量,即使使用了 Option Explicit,ReDim 也将使用后声明的这个变量,且不会导致编译错误。为了避免这种冲突,就不应把 ReDim 作为声明语句使用,而只应作为重定义数组大小的语句。
注意 要改变 Variant 所包含的数组的大小,必须在试图改变其数组大小之前显式声明该 Variant 变量。
保留动态数组的内容 每次执行 ReDim 语句时,当前存储在数组中的值都会全部丢失。Visual Basi 重新将数组元素的值置为 Empty(对 Variant 数组)、置为 0(对 Numeric 数组)、置为 零长度字符串(对 String 数组)或者置为 Nothing(对于对象的数组)。
在为新数据准备数组,或者要缩减数组大小以节省内存时,这样做是非常有用的。有时希望改变数组大小又不丢失数组中的数据。使用具有 Preserve 关键字的 ReDim 语句就可做到这点。例如,使用 UBound 函数引用上界,使数组扩大、增加一个元素,而现有元素的值并未丢失:
ReDim Preserve DynArray (UBound (DynArray) + 1)
在用 Preserve 关键字时,只能改变多维数组中最后一维的上界;如果改变了其它维或最后一维的下界,那么运行时就会出错。所以可这样编程:
ReDim Preserve Matrix (10, UBound (Matrix, 2) + 1)
而不可这样编程:
ReDim Preserve Matrix (UBound (Matrix, 1) + 1, 10)
VB中preserve的用法的更多相关文章
- 转】VB中Set的用法
Set 语句 将对象引用赋给变量或属性. 语法 Set objectvar = {[New] objectexpression | Nothing} Set 语句的语法包含下面部分: 部分 描述 ob ...
- [转载]C#中MessageBox.Show用法以及VB.NET中MsgBox用法
一.C#中MessageBox.Show用法 MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBo ...
- VB中输入函数InputBox的用法
格式:InputBox(pronpt[,title][,default][,xpos,ypos]).其中的pronpt为窗口的提示词,title为输入窗口的标题,default为输入窗口的默认内容,x ...
- mysql中event的用法详解
一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...
- C#中Dictionary的用法
在C#中,Dictionary提供快速的基于兼职的元素查找.他的结构是这样的:Dictionary<[key], [value]> ,当你有很多元素的时候可以使用它.它包含在System. ...
- VB 中 copymemory的有关问题
dim a() as long dim b() as bytecopymemory b(0),byval "1234",4 copymemory byval varptr(a(0) ...
- vb中的资源文件
--- 一.VB中资源文件的分类 ---- 通常将资源分为两类:1.字符串资源,包括菜单和文本中使用的字符串,如"Hello World"等:2.二进制资源,如位图(.BMP),图 ...
- C#中string.format用法详解
C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...
- SQL中distinct的用法
SQL中distinct的用法 1.作用于单列 2.作用于多列 3.COUNT统计 4.distinct必须放在开头 5.其他 在表中,可能会包含重复值.这并不成问题,不过,有时您也许希望仅仅列出 ...
随机推荐
- hibernate中的@GeneratedValue与@GenericGenerator
1.GeneratedValue与GenericGenerator的区别 @GeneratorValue注解----JPA通用策略生成器 @GenericGenerator注解----自定义主键生成策 ...
- 小菜鸟 菜谈 KMP->字典树->AC自动机->trie 图 (改进与不改进)
本文的主要宗旨是总结自己看了大佬们对AC自动机和trie 图 的一些理解与看法.(前沿:本人水平有限,总结有误,希望大佬们可以指出) KMP分割线--------------------------- ...
- MySQL中concat以及group_concat的使用
摘自:https://www.jianshu.com/p/43cb4c5d33c1 说明: 本文中使用的例子均在下面的数据库表tt2下执行: 一.concat()函数 1.功能:将多个字符串连接成一个 ...
- HDU4497 GCD and LCM(数论,质因子分解)
HDU4497 GCD and LCM 如果 \(G \% L != 0\) ,那么输出 \(0\) . 否则我们有 \(L/G=(p_1^{r_1})\cdot(p_2^{r_2})\cdot(p_ ...
- 2、maven仓库位置设置
根据我们maven的安装目录找到config文件夹,并找到下面的setting.xml文件,在该文件里面添加下面的代码: <localRepository>F:\apache-maven- ...
- 中国MOOC_零基础学Java语言_第7周 函数_2完数
2 完数(5分) 题目内容: 一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). 现在,你要写一个程序, ...
- golang 导出CSV文件中文乱码的问题
golang 导出CSV文件中文乱码的问题 解决办法: 在csv文件的开头写入 UTF-8 BOM // 创建文件 dstf, err := os.Create("./data/" ...
- python接口自动化:绕过验证码登录
上线产品的登录接口会有验证码,一般可以通过添加cookie的方式绕过验证码. 一.抓登录的cookie 1. 先手动登录一次,然后用fiddler抓取这个cookie,再直接把这个值添加到cookie ...
- is_displayed()检查元素是否可见
返回的结果是bool类型,以百度首页为案例,来验证"©2019 Baidu 使用百度前必读意见反馈京ICP证030173号 "是否可见,见实现的代码: from selenium ...
- 前端 CSS 盒子模型 边框 border属性
边框 border:边框的意思,描述盒子的边框 边框有三个要素: 粗细 线性样式 颜色 border: solid border特性 如果颜色不写,默认是黑色.如果粗细不写,不显示边框.如果只写线性样 ...