版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
PROGRAMMING课堂教学VISUALBASICFUNDAMENTALSVB的程序结构基础VisualBasicProgrammingStructure掌握顺序结构、选择结构与循环结构,建立程序设计的基本思维程序设计基础课程课程目录VB程序结构基础·六大章节全景导览01VB语言概述了解VB的发展历程、集成开发环境界面布局,以及工程文件中窗体模块、标准模块、类模块的组成关系与各自用途02数据类型与变量掌握Integer、Long、String、Boolean等数据类型的内存占用与取值范围,学会正确声明变量、定义常量并启用OptionExplicit强制声明03运算符与表达式熟悉算术、比较、逻辑三类运算符的语法与优先级规则,理解字符串连接符的使用场景及括号对运算顺序的控制作用04控制结构掌握If条件判断、SelectCase多分支、For计数循环和Do条件循环的语法格式,学会嵌套使用和Exit语句控制流程05数组理解静态数组与动态数组的区别,掌握ReDimPreserve扩展数组的方法,了解多维数组的声明与遍历方式06过程与函数区分Sub过程与Function函数的返回值差异,理解ByVal按值传递与ByRef按引用传递的机制,掌握变量作用域层级与常用内置函数演讲人:XXX20260808CHAPTER01VB语言概述发展历程·开发环境·工程组成HISTORYVB语言发展简史FromVisualBasic1.0to.NETEraVisualBasic自1991年诞生以来,经历了从可视化快速开发到.NET面向对象平台的重大转型,其易学易用的设计理念始终贯穿各版本。1991VB1.0·可视化编程开创微软首创拖拽控件的可视化编程模式,大幅降低了Windows应用程序的开发门槛,让非专业程序员也能快速构建图形界面应用。1998VB6.0·桌面开发黄金时代引入ADO数据访问、ActiveX组件和完善的IDE调试功能,成为当时最流行的桌面应用开发工具,大量企业信息系统基于此版本构建。2002VB.NET·面向对象转型随.NETFramework发布,全面转向面向对象范式,支持继承、接口和泛型,虽与VB6语法不完全兼容,但获得了更强的类型安全和框架生态支撑。Now持续应用·教学与自动化仍广泛用于OfficeVBA自动化、企业内部工具和教学入门场景,理解其程序结构基础是掌握微软技术栈和遗留系统维护的重要前提。VB的核心价值:以最低学习成本实现最大开发效率,这一理念从1991年延续至今IDEOverviewVB集成开发环境IntegratedDevelopmentEnvironmentVB的IDE集成了代码编辑、界面设计、属性配置和工程管理于一体,理解各窗口的功能是高效开发的前提。代码编辑器提供语法高亮、自动补全和智能感知功能,双击窗体上的控件即可跳转到对应的事件处理过程,是编写业务逻辑的核心区域。窗体设计器以所见即所得的方式拖放控件并调整布局,控件的位置、大小和外观通过属性窗口精确设置,设计与代码分离是VB可视化开发的核心优势。属性窗口显示当前选中对象的所有可配置属性,支持按字母序或分类序浏览,修改属性值后窗体实时预览变化,无需手动编写赋值代码即可完成界面定制。工程资源管理器以树形结构展示当前工程中所有窗体、标准模块和类模块文件,右键菜单支持添加新模块、移除文件和查看代码等操作,是管理项目文件结构的入口。提示:熟练掌握各窗口的切换与配合,是提升VB开发效率的关键第一步STRUCTUREVB工程的组成结构工程文件·窗体模块·标准模块·类模块VB工程以.vbp工程文件为核心索引,关联窗体、标准模块和类模块三类代码载体,各自承担界面交互、公共逻辑和自定义对象的职责。VB工程文件类型一览文件类型扩展名主要用途特点说明工程文件.vbp记录工程配置和所包含文件的清单每个工程对应一个.vbp文件,打开工程时自动加载关联的所有模块窗体模块.frm存放窗体界面设计和事件处理代码包含控件布局和对应的Click、Load等事件过程,是用户交互的主要载体标准模块.bas存放全局变量、通用过程和公共函数不与特定窗体绑定,其中的Public过程可被工程中任何模块调用类模块.cls定义自定义类的属性、方法和事件支持面向对象编程,可创建具有封装特性的自定义对象实例资源文件.res集中管理图片、字符串、声音等资源避免硬编码资源路径,便于多语言和本地化维护小结:合理划分模块职责、避免将所有代码堆砌在窗体中,是VB工程保持可维护性的关键原则SECTIONDIVIDERCHAPTER02数据类型与变量数据类型·变量声明·常量定义VBVisualBasic02DATATYPES基本数据类型总览VB常用数据类型速查表VB的数据类型按存储需求从1字节到16字节不等,Integer适合一般整数运算,Long用于大数值和API调用,Double处理高精度小数。数据类型存储空间取值范围典型用途Byte1字节0~255二进制数据、颜色值、小范围计数Boolean2字节True/False条件判断、开关状态标志Integer2字节-32,768~32,767循环计数器、一般整数运算Long4字节-2,147,483,648~2,147,483,647大数值计算、WindowsAPI参数Single4字节±3.4E38(7位有效数字)精度要求不高的浮点运算Double8字节±1.79E308(15位有效数字)科学计算、高精度小数Currency8字节±922万亿(4位小数)财务货币计算,避免浮点误差Date8字节公元100年~9999年日期时间存储与运算String(可变)10+长度0~约20亿字符文本处理、用户输入Variant16/22字节任意类型兼容旧代码,新项目应避免优先使用具体类型而非Variant,既提升运行效率又增强代码可读性和类型安全性DATATYPES数值类型详解Integer在VB.NET中实际为4字节Int32(与VB6的2字节不同),跨版本移植时需注意;浮点运算优先选Double以获得足够精度;涉及金额的加减乘除务必使用Currency或Decimal。整数类型的选择策略版本差异:VB6中Integer占2字节、Long占4字节,但VB.NET中Integer升级为4字节Int32、Long升级为8字节Int64,编写跨版本代码时需特别注意这一差异以避免溢出实用原则:循环计数器和数组索引通常用Integer即可满足需求,只有当数值可能超过三万时才需要改用Long,过度使用大类型会浪费内存并降低运算速度浮点与货币类型的区别精度选择:Single提供约7位有效数字、Double提供约15位有效数字,大多数科学计算和工程应用应选择Double以确保精度足够,Single仅在内存极度敏感的场景下考虑金额计算:Currency类型内部以整数方式存储并自动除以10000,保证小数点后四位精确无误,所有涉及金额累加、税率计算的代码都应使用Currency而非DoubleVB程序结构基础DATATYPESString&Date字符串与日期类型可变长String按需分配内存适合大多数文本处理,固定长String*length在文件读写和对齐输出时有特殊用途;Date类型底层为Double浮点数,整数部分表示天数、小数部分表示时刻。可变长与固定长字符串String声明可变长字符串,内存随内容动态调整,适合用户输入和文本拼接;String*50声明固定50字符,不足自动补空格,常用于定长记录文件读写字符串连接运算符推荐使用&运算符而非+号。+号遇到数值型变量会尝试数学加法,&号始终执行字符串连接,避免隐式类型转换的意外Date类型的底层存储内部以Double存储,整数部分是从1899年12月30日起的天数偏移,小数部分是当天已过时间的比例,因此DateDiff函数和直接相减都能正确计算天数差常用字符串函数Len获取长度、Mid截取子串、Left/Right取左右端字符、Trim去除首尾空格、InStr查找子串位置,组合使用可完成绝大多数文本处理字符串示例Dims1As
StringDims2As
String*50s1="Hello"s1=s1&
"World"'Len(s1)→11'Mid(s1,1,5)→"Hello"日期示例Dimd1As
DateDimd2As
Dated1=#1/1/2026#d2=#6/15/2026#'d2-d1→165天'DateDiff("d",d1,d2)→165VVBPROGRAMMINGFUNDAMENTALSSyntax变量的声明与命名规则VB允许隐式声明变量但强烈不推荐,未声明的变量默认为Variant类型且拼写错误不会被编译器捕获;养成使用Dim显式声明每个变量并指定类型的习惯。Dim声明语句的多种用法DimDimxAsIntegerDima,b,cAsInteger单变量与多变量声明:DimxAsInteger声明单个变量并指定类型;Dima,b,cAsInteger在VB.NET中三个均为Integer,但在VB6中只有c是Integer、a和b变为Variant——这是跨版本最常见的陷阱之一。DimcountAsInteger=0初始化与默认值:可在声明时赋初值DimcountAsInteger=0,也可先声明后赋值。数值变量默认初始化为0,字符串默认为空串,对象变量默认为Nothing。变量命名规范与最佳实践NamingstrNameintCount命名规则:变量名必须以字母或下划线开头,可包含字母、数字和下划线,不能使用VB保留字如If、For、Next等。建议采用匈牙利命名法或驼峰命名法,如strName表示字符串、intCount表示整数。语义性与作用域:名称应具有语义性,避免使用x、y、temp等无意义缩写。同一作用域内变量名不可重复,但不同过程中可使用相同名称的局部变量而互不影响。FUNDAMENTALS常量与OptionExplicitConst定义的常量在编译期确定值、运行时不可修改,比变量更安全也更高效;OptionExplicitOn强制要求所有变量必须先声明后使用,将拼写错误提前到编译阶段发现。01常量定义与类型约束ConstPiAsDouble=3.14159265358979定义双精度常量,ConstMaxRetryAsInteger=3定义整型常量;常量值必须是编译时可确定的表达式,不能包含函数调用或变量引用。02常量作用域与可见性常量可在过程内声明(仅该过程可用)或在模块声明区用Public/Private声明(模块级或全局可见),合理设置作用域可避免不必要的耦合和信息泄露。03OptionExplicit强制声明机制OptionExplicit必须放在模块所有代码之前(仅次于OptionCompare),启用后任何未经Dim/Private/Public/Static声明的变量名都会触发编译错误,从根本上消除因拼写错误创建意外新变量的隐患。04IDE配置最佳实践建议在IDE选项中勾选"要求变量声明",这样新建的每个模块会自动插入OptionExplicit语句,无需手动添加即可确保整个项目的类型安全基线一致。CHAPTER03运算符与表达式算术运算·比较运算·逻辑运算·优先级03VBVB程序结构基础OPERATORSArithmetic&String算术运算符与字符串连接VB的算术运算符体系中,/执行浮点除法而\执行整数除法(结果截断取整),Mod返回除法余数;字符串连接应始终使用&而非+号。六种算术运算符详解四则运算与幂运算:加(+)、减(-)、乘(*)、浮点除(/)是最常用的四则运算,其中/的结果始终为Double类型;幂运算^用于方根和指数计算,如x^0.5等价于Sqr(x)整数除与取模:整数除\先将操作数四舍五入为整数再相除并截断小数,7\2=3;取模Mod返回余数,7Mod2=1,常用于判断奇偶性+加-减*乘/浮点除\整数除^幂字符串连接与类型安全&与+的差异:&运算符将两侧强制转为字符串拼接,'Hello'&123→'Hello123';而+一侧为数值时尝试加法,'5'+3→8最佳实践:所有字符串拼接统一使用&运算符;需格式化数值输出时,先用Format或CStr函数显式转换再拼接,确保结果符合预期且代码意图清晰推荐✓&强制字符串拼接慎用✗+可能触发加法运算VBVB程序结构基础OPERATORSCOMPARISON&LOGIC比较运算符与逻辑运算符VB的比较运算符包括等于、不等于、大小比较以及对象引用比较Is和模式匹配Like;逻辑运算符中AndAlso和OrElse支持短路求值。比较运算符的完整体系基本比较:=(等于)、<>(不等于)、<、>、<=、>=六种运算符优先级相同,从左到右依次求值;字符串比较受OptionCompare设置影响Is运算符:比较两个对象变量是否指向同一实例,而非比较值内容Like运算符:支持通配符模式匹配,如nameLike"A*"判断是否以A开头,在文件过滤和数据验证中非常实用=<><><=>=IsLike逻辑运算符与短路求值基本逻辑运算:Not(取反)、And(与)、Or(或)、Xor(异或)四种;VB.NET额外提供AndAlso和OrElse两个短路版本短路机制:左侧为False时AndAlso直接返回False;左侧为True时OrElse直接返回True,不再计算右侧表达式安全价值:短路求值不仅是性能优化更是安全措施——IfobjIsNotNothingAndAlsoobj.Value>0,当obj为Nothing时不会继续访问Value属性,从而避免NullReferenceExceptionNotAndOrXorAndAlsoOrElseSYNTAX运算符优先级规则VB运算符优先级从高到低依次为:一元正负号→幂运算→乘除→整数除→取模→加减→字符串连接→比较运算→Not→And/AndAlso→Or/OrElse→Xor;同级运算符从左到右求值。TABLEVB运算符优先级表(从高到低)优先级层级运算符说明示例最高^,-(一元)幂运算、一元取负-2^3=-(2^3)=-8*,/乘法、浮点除法6*3/2=9\整数除法7\2=3Mod取模运算7Mod2=1+,-,&加减法、字符串连接'A'&1+2='A3'=<><><=>=IsLike所有比较运算符a>bAndc<dNot逻辑取反Not(a>b)最低And/AndAlsoOr/OrElseXor逻辑组合运算a>0Andb<10括号可覆盖任何默认优先级,建议在复杂表达式中主动使用括号提高可读性和安全性Chapter04控制结构顺序结构·选择结构·循环结构STRUCTUREVBFUNDAMENTALS顺序结构与赋值语句顺序结构是最基本的程序执行模式,语句自上而下逐条执行无跳转;赋值语句是改变变量值的核心手段,理解赋值的单向性是掌握所有控制结构的前提。顺序结构执行流每条语句执行完毕后自动进入下一条,不存在隐式跳转;程序从SubMain或窗体Load事件开始,沿代码书写方向推进直到遇到EndSub或控制转移语句。赋值语句格式格式为"变量=表达式",等号右侧先完整求值再将结果存入左侧变量;数值类型赋值时若精度不匹配会自动转换,但OptionStrictOn时要求显式转换以避免精度丢失。Set语句与对象引用Set语句专门用于将对象引用赋给对象变量,如Setws=Sheets(1),普通赋值用=即可;忘记Set会导致编译错误,误对非对象变量使用Set同样报错。多语句同行与可读性多语句可用冒号分隔写在同一行:x=1:y=2:z=x+y,但这种写法降低可读性,建议仅在简短关联操作时使用,复杂逻辑应保持每行一条语句的清晰格式。SYNTAXIf条件判断语句If语句有单行和多行两种语法:单行适合简单操作,多行If-ElseIf-Else适合多条件分支且可读性更好;当分支超过三个时优先使用ElseIf链而非嵌套If以保持代码扁平清晰。01If语句的语法形式单行与多行语法:单行语法IfconditionThenstmt[Elsestmt]适合简短操作;多行语法以If开头、EndIf结尾,中间可包含任意数量的ElseIf分支和一个可选的Else兜底分支条件表达式要求:必须是Boolean类型或能隐式转换为Boolean的表达式;VB.NET中OptionStrictOn时不允许IfxThen这种数值隐式转布尔写法,必须显式写成Ifx<>0Then02多分支与嵌套的选择策略ElseIf链:适合对同一变量的不同取值范围做互斥判断,如成绩等级划分;注意条件必须从高到低排列,否则高阈值会被提前拦截嵌套If:适合需要同时满足多个维度的复合条件,如先判断是否及格再判断出勤率;嵌套层数不宜超过两层,超过时应考虑重构为SelectCase或提取为独立函数If-ElseIf多分支判断流程图VVBPROGRAMMINGSELECTCASESYNTAXSelectCase多分支选择SelectCase在入口处对测试表达式只求值一次,然后与各Case子句逐一匹配,比多次求值的ElseIf链更高效;Case支持逗号分隔的值列表、To范围和Is比较运算符三种写法。01语法结构SelectCasetestExpression后跟多个Case子句,每个Case可包含逗号分隔的多个值(Case1,3,5)、连续范围(Case6To10)或Is比较(CaseIs>100),三种写法可在同一Case中混合使用。02兜底分支CaseElse处理所有未匹配的剩余情况,虽非必需但强烈建议保留作为防御性编程的兜底分支;若无CaseElse且无匹配项,控制权直接跳到EndSelect之后,可能导致逻辑遗漏。03核心区别SelectCase与If-ElseIf的核心区别在于前者只对测试表达式求值一次且各Case必须是常量或简单表达式,后者每个ElseIf可以是完全不同的复杂条件;当判断条件涉及多个不同变量时应选If而非SelectCase。04嵌套与退出ExitSelect可在任意Case块内提前退出整个Select结构,类似循环中的ExitFor;嵌套的SelectCase各自需要独立的EndSelect配对,内层Select必须完全包含在外层的某个Case块中。VBVB程序结构基础SYNTAXLOOPSTRUCTUREForNext计数循环Forcounter=startToend[Stepstep]在进入循环时一次性计算起止值和步长,此后即使循环体内修改了end对应的变量也不会影响循环次数;Step可为负数实现递减循环,省略时默认为1。01基本语法与行为语法要素:ForiAsInteger=1To10声明计数器并指定范围,每次迭代后i自动加1(默认Step1);Step-1实现倒序循环如Fori=10To1Step-1;Step可以是小数如Step0.5,但此时计数器应声明为Double。次数锁定:循环次数在进入For语句时即确定——Dimn=10:Fori=1Ton:n=100:Next,此循环仍只执行10次而非100次;若在循环体内修改计数器i本身则会影响后续迭代,通常不建议这样做。ForiAsInteger=1To10Step2'loopbodyNexti02嵌套循环与Continue/Exit嵌套遍历:嵌套For循环用于处理二维数据如矩阵遍历,外层控制行、内层控制列;每层必须有独立的计数器变量,且Next语句可带变量名如Nextj、Nexti以提高可读性并防止配对错误。流程控制:ExitFor立即跳出当前最内层For循环,转到Next之后的语句;ContinueFor跳过本次迭代的剩余代码直接进入下一次迭代;两者都只能作用于所在的最内层循环,外层循环不受影响。Fori=0Torows-1Forj=0Tocols-1IfcondThen
ExitForNextjNextiVBVB程序结构基础CONTROLFLOWLOOPSTRUCTUREDoLoop条件循环DoLoop有四种变体:DoWhile/Until...Loop条件在前、至少检查一次可能零次执行;Do...LoopWhile/Until条件在后、循环体至少执行一次再判断是否继续。条件前置与后置的区别条件前置(DoWhile):在执行任何迭代前先检查条件,若初始条件为False则循环体完全不执行;适合"满足条件才处理"的场景如读取文件直到EOF,避免对无效数据执行操作。条件后置(Do...LoopUntil):先执行循环体再检查条件,保证循环体至少运行一次;适合"先尝试再判断"的场景如用户输入验证,必须先获取输入才能判断是否合法,省去额外的初始化代码。While/Until语义与防死循环语义互补:While表示"条件为True时继续",Until表示"条件为True时停止",两者逻辑互补:DoWhilex<10等价于DoUntilx>=10;选择哪个取决于哪种表述更符合业务语义的自然表达。防死循环:DoLoop没有内置计数器,必须在循环体内手动更新条件变量并确保其最终能使条件变为False/True以终止循环;忘记更新或更新方向错误会导致死循环,调试时用Debug.Print输出关键变量追踪状态。PROGRAMMINGVBSTRUCTURE循环嵌套与Exit语句嵌套循环的总执行次数等于各层循环次数的乘积,三层各10次的嵌套就是1000次迭代;ExitFor/Do只退出所在的最内层循环,要退出外层需借助Boolean标志变量或将循环封装到Function中用Return提前返回。01嵌套循环执行规则嵌套循环遵循"外层走一步、内层走完一轮"的规则:外层i从1到3、内层j从1到4,则内层共执行12次。经典应用包括矩阵运算、九九乘法表打印和组合枚举等需要双重或多重遍历的场景。NestedLoop02ExitFor/ExitDoExitFor和ExitDo只退出它们直接所在的那一层循环,外层循环继续正常执行。若需要在内层发现目标后立即终止所有循环,可设置Boolean标志found=True并在外层检查该标志来决定是否Exit。ExitStatement03Function封装提前返回将嵌套循环封装到Function过程中,找到目标后用Return返回值并自然退出整个函数,避免了标志变量的额外管理。这种方法代码更干净且复用性更强。FunctionReturn04Continue跳过迭代ContinueFor跳过当前迭代的剩余代码进入下一次计数,ContinueDo同理。在过滤场景中遍历时遇到不符合条件的元素直接Continue跳过处理逻辑,比用If包裹全部处理代码更清晰。ContinueSkipChapter05数组静态数组·动态数组·ReDimPreserve·多维数组[]VVBPROGRAMMINGARRAYSFUNDAMENTALS静态数组与动态数组静态数组用Dimarr(9)AsInteger声明时即分配固定内存,上限不可更改但访问速度快;动态数组用Dimarr()AsInteger声明空括号、运行时用ReDim分配实际大小,灵活但每次ReDim不带Preserve时会清除已有数据。静态数组的声明与访问StaticArrayDimscores(9)AsIntegerDimscores(9)AsInteger声明包含10个元素的数组(索引0到9),VB默认下界为0可通过OptionBase1改为1;声明时大小必须是常量表达式,不能用变量如Dimarr(n)会导致编译错误。数组元素通过下标访问:scores(0)=85,下标超出范围会触发IndexOutOfRangeException;可用UBound(scores)获取上界、LBound获取下界,遍历推荐用Fori=LBound(arr)ToUBound(arr)确保兼容不同下界设置。动态数组的声明与ReDimDynamicArrayDimdata()AsStringDimdata()AsString声明动态数组但不分配内存,此时data为Nothing;首次使用前必须ReDimdata(9)分配10个元素的空间,之后可随时ReDimdata(19)重新调整为20个元素。不带Preserve的ReDim会清除数组中所有已有数据并重新初始化;若需保留旧数据必须写ReDimPreservedata(19),但Preserve只能调整最后一维的上界且不能改变维数,频繁调用有性能开销。特点编译期固定大小·访问速度快·不可调整容量特点运行时灵活调整·ReDim重分配·Preserve可保留数据VBFUNDAMENTALSReDimPreserve与多维数组ReDimPreserve只能修改最后一维的上界且不能改变维数或数据类型,缩小数组时超出新上界的元素数据丢失;多维数组用逗号分隔各维上界如Dimm(3,5)声明4行6列的二维数组。ReDimPreserve的使用限制只允许调整最后一维上界:对一维数组可自由扩缩,对二维数组Dimm(3,5)只能改第二维如ReDimPreservem(3,7),试图改第一维ReDimPreservem(5,5)会报运行时错误扩缩行为与性能:扩大数组时新增元素初始化为默认值(数值为0、字符串为空);缩小数组时超出新上界的元素被丢弃且不可恢复;频繁在循环中ReDimPreserve性能较差应考虑Collection或List替代多维数组的声明与遍历声明与初始化:Dimmatrix(2,3)AsDouble声明3行4列的二维数组共12个元素,VB数组维度最多支持32维但实际很少超过三维;初始化可用花括号字面量:Dimm(,)AsInteger={{1,2},{3,4}}遍历方式:遍历二维数组需要双层嵌套循环:外层Forr=0ToUBound(m,1)控制行、内层Forc=0ToUBound(m,2)控制列,UBound的第二个参数指定维度编号;ForEach可遍历所有元素但无法获取各维索引CHAPTER06过程与函数Sub与Function·参数传递·作用域·内置函数VBPROGRAMMINGSYNTAXSub过程与Function函数Sub过程用于执行一系列操作而不需要返回计算结果,如打印报表、更新界面;Function函数用于计算并返回一个值,可在表达式中直接使用如result=CalculateTax(amount)。Sub过程的定义与调用定义语法:SubProcessName(param1AsType,param2AsType)定义过程,EndSub结束;调用时可省略Call关键字直接写ProcessNamearg1,arg2,或使用CallProcessName(arg1,arg2)带括号形式流程控制与可见性:过程中可用ExitSub提前退出回到调用点;SubMain是控制台程序的入口点,窗体程序中通常从Form_Load事件开始执行;PrivateSub限制过程仅在本模块内可见,PublicSub可被其他模块调用Function函数的定义与返回值定义与返回:FunctionCalcSum(aAsInteger,bAsInteger)AsInteger定义函数并声明返回类型,EndFunction结束;返回值通过将结果赋给函数名实现:CalcSum=a+b,也可用Returna+b一步完成赋值和退出调用与最佳实践:函数可在表达式中直接调用:total=CalcSum(3,5)*2;若函数无明确返回值则返回该类型的默认值(数值为0、字符串为空);避免在Function中产生副作用如修改全局变量,保持函数的纯计算特性便于测试和推理VBPROGRAMMINGPARAMETERSParameterPassingByVal与ByRef参数传递ByVal将实参的副本传给形参,过程内的修改不影响原始变量;ByRef将实参的内存地址传给形参,过程内的修改直接反映到原始变量。VB.NET默认ByVal(VB6默认ByRef)。ByVal按值传递的机制SubTest(ByValxAsInteger)x是实参的独立副本,Test内部对x的任何修改只影响副本,调用方的原始变量保持不变;对于Integer等基本类型这很安全,但对于大型Structure复制开销较大String的特殊处理:ByVal传递String时行为类似值语义,过程内重新赋值不会影响原始字符串;只有当过程通过方法修改字符串内容时才需要注意引用共享问题安全·不影响原始值ByRef按引用传递的应用SubSwap(ByRefaAsInteger,ByRefbAsInteger)a和b直接指向调用方的变量内存,Swap内部的交换操作会真正改变原始变量的值;这是实现多值返回的经典模式如SubGetMinMax(ByRefmin,ByRefmax)ByRef的风险与防护:过程可能意外修改不应被改变的变量,因此只在确实需要回传结果时使用;VB.NET中可用括号包裹实参强制以ByVal方式传递:Swap((x),(y))谨慎·可能修改原始值ByVal传递副本→安全隔离VSByRef传递地址→直接修改PROGRAMMING变量作用域与Static关键字VB变量作用域从窄到宽分为块级、过程级、模块级和项目级四层;Static声明的过程级变量在过程调用之间保持值不丢失,兼具局部变量的封装性和模块级变量的持久性。VBBASICS四级作用域的可见性规则块级与过程级变量:块级变量在If/For/Select等代码块内用Dim声明,仅在该块内可见,块结束后不可访问但其值在过程多次进入该块时仍保留;过程级变量在整个Sub/Function内可见,每次调用时重新初始化为默认值。模块级与项目级变量:模块级变量在模块顶部的声明区用Private或Dim声明,该模块内所有过程共享同一份数据;Public变量在标准模块中声明后
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 领导班子思想政治建设调研报告2026(3篇)
- 2026数字政府AI融合创新落地实践报告
- 菜谱定制实施方案范文
- 城市更新实施方案 河北
- ATP的主要来源细胞呼吸
- 2026年度企业财务会计决算报表软件培训
- 2026商业航天发射成本下降趋势与卫星互联网组网机会分析报告
- 地震防灾与对策
- 《选修离散复习》课件
- 2026中国物联网技术应用场景与市场增长预测报告
- 急诊与接诊制度
- 掘进工作面安全风险辨识
- 颈椎病的康复上传版课件
- 人教版高一下学期期末考试数学试题与答案解析(共五套)
- 成人护理学绪论课件
- 2023-2024学年河南省开封市顺河区求实中学八年级(上)月考数学试卷(9月份)(含解析)
- 2024年《药物临床试验质量管理规范》(GCP)网络培训题库
- 内镜室半年工作总结
- 【模板】软件验证报告
- 广西科技大学家庭经济困难学生及家庭情况调查表、广西科技大学家庭经济困难学生认定申请表
- 《钛制锅具》规范
评论
0/150
提交评论