1、DEV342 Visual Basic 2005: 应用程序框架 和高级语言特性,施凡 微软 Visual Basic MV,听起来很熟悉?,创建一个组件,可以将事件日志记录到多个事件源 创建ini文件或进行复杂的注册表操作保存用户设置 一遍又一遍地编写用户身份验证的代码 创建强类型的集合包装类型 在网上搜索各种代码片断,然后粘贴到你的程序里 抱怨窗体设计器生成的代码与自己的代码混在一起,提纲,在一个新起点上架构您的应用程序 自定义用户身份验证 使用配置信息 使用应用程序日志 自定义IDE的使用体验 插入代码段或扩展代码段库 自定义项目和项目元素模板 语言新特性 泛型 编译器警告 附属类型 其
2、它语言特性,自定义用户身份验证,My命名空间层次图, 应用程序标题、版本、日志、描述信息 , 注册表、 音频、 文件系统、网络、鼠标 , 用户名、用户组、 域 , 访问应用程序的资源:字符串、图标、图片, 用户和应用程序配置信息, 项目中的窗体, 项目引用的Web服务,配置信息和用户设置 你现在用的方法,用App.config 保存XML格式的配置信息 某些情况下,读写XML很痛苦用Framework中的类可以读取配置信息 但是不能修改和写入可扩展以支持更多功能 方法还算直观,但也不是特别简单,Framework类库支持配置信息的读写 配置信息的强类型验证 有智能感知的帮助 支持应用程序级或用
3、户级分别设置 在部分信任级别下工作 可扩展的Provider和验证模式 客户端和Web共享同一基础框架 可从项目设计器窗口轻松访问 对各种专用配置提供支持 连接字符串,Web服务代理类等.,配置信息和用户设置 我们现在提供的方法,配置系统的架构,Settings Base,Application Settings Base,Windows App1 Settings,My Settings,Provider Interface,本地设置,远程,自定义,SQL,Access,自定义,实战设置功能,应用程序级设置,用户级设置,Myapp.exe.config ,fred.config,ethel.
4、config,gladys.config ,My命名空间层次图, 应用程序标题、版本、日志、描述信息 , 注册表、 音频、 文件系统、网络、鼠标 , 用户名、用户组、 域 , 访问应用程序的资源:字符串、图标、图片, 用户和应用程序配置信息, 项目中的窗体, 项目引用的Web服务,处理验证事件,实战设置功能,载入,My.Settings.UseHighQuality = True Settings 在第一次访问的时候自动载入配置数据,Private Sub Settings_SettingChanging(ByVal sender As Object, _ByVal e As Settings
5、Arg) Handles MyBase.SettingChangingIf e.SettingName = “SignatureFile” ThenIf Not My.Computer.FileSystem.FileExists(e.Setting.Value)Then 取消该事件End IfEnd If End Sub,My.Settings.UseHighQuality = True My.Settings.Save(),保存,使用设置功能,使用应用程序事件日志,可扩展代码段库,已内置超过500个代码段! 包含多种接口实现和常见设计模式 提供标准框架便于自行编写代码段 可配置右键菜单的菜单
6、项 多个代码段存放路径 已结合在各种第三方工具中 Refactor!、CodeWise、等等 网上还有代码段编辑器 可创建或编辑代码段,编写自定义代码段,语言新特性,Using语句 Continue语句 Global关键字 访问器可见性修饰 附属类型 无符号整数 运算符重载 泛型 编译器警告,Using 语句 Acquire, Execute, Release,一种而正确释放对象资源的快速写法 比使用Try、Catch、Finally更易读 与Dispose-Finalize模式配套使用,Using 语句块正确处置对象资源 Using fStr As New FileStream(path,
7、FileMode.Append)For i As Integer = 0 To fStr.LengthfStr.ReadByte()Next到达块尾部时,文件流自动被关闭 End Using,Continue 语句 直接跳到下一次循环,让循环逻辑更清楚,For j As Integer = 0 to 5000While matrix(j) IsNot thisValueIf matrix(j) Is thatValue 直接跳到下一个jContinue ForEnd IfGraph(j)End While Next j,Global 关键字 访问根(全局)命名空间,解决命名冲突问题 代码生成器
8、的更佳选择,Namespace HeadTraxClass Form1Inherits Windows.Forms.FormsSub LastName(nm As String)Global.Microsoft.VisualBasic.Left(nm)End SubEnd Class End Namespace,访问器可见性修饰符 让 Get 和 Set 有不同的可见性,让所有对字段的访问都经过get和set 让字段赋值获得更好的验证,Property Salary() As IntegerGetReturn mSalaryEnd GetPrivate Set( value As Intege
9、r)If value 0 ThenThrow New Exception(“错误”)End IfEnd Set End Property,附属类型(Partial Types) 同一类型,不同文件,设计器生成的代码可以分到另外一个文件 将来,Public Class Form1Inherits Windows.Forms.Form 你的代码 End ClassPartial Class Form1 设计器的代码Sub InitializeComponent() 控件初始化End Sub End Class,运算符重载 创建简洁的使用方式,Class AddrPrivate mString As
10、 StringProperty Value() As StringGetReturn mStringEnd GetSet (value As String)If Valid(value) ThenmString = valueEnd IfEnd SetShared Operator &(ad1 As Addr, ad2 As Addr) As AddrReturn New Addr(ad1.Value & ad2.Value)End Operator End Class,无符号整型 现已全面支持,完全由平台提供 主要用于Windows API调用和交互,Dim sb As SByte = -4
11、 这个是Byte的有符号版本 Dim us As UShort Dim ui As UInteger Dim ul As ULong VisualBasic 的内置函数现已完全支持 If IsNumeric(uInt) Then 返回True End If,Public Class ArrayListPrivate elements() As ObjectPrivate mCount As IntegerPublic Sub Add(element As Object) If (mCount = elements.Length) Then _Resize(mCount * 2)mCount +
12、= 1elements(mCount) = elementEnd SubDefault Public Property Indexer(index As Integer) As ObjectGet : Return elements(index) : End GetSet : elements(index) = value : End SetEnd PropertyPublic Property Count() As IntegerGet : Return mCount : End GetEnd Property End Class,Dim intList As New ArrayList()
13、intList.Add(1) 参数被装箱 intList.Add(2) 参数被装箱 intList.Add(“Three”) 错误,但运行时才能发现Dim i As Integer = CInt(intList(0) 类型转换,Public Class List(Of TItem)Private elements() As TItemPrivate count As IntegerPublic Sub Add(element As TItem) If (count = elements.Length) Then _Resize(count * 2)count += 1elements(coun
14、t) = elementEnd SubDefault Public Property Indexer(index As Integer) As TItemGet : Return elements(index) : End GetSet : elements(index) = value : End SetEnd PropertyPublic Property Count As IntegerGet : Return count : End GetEnd Property End Class,泛型,Dim intList As New List(Of Integer)intList.Add(1
15、) 没有装箱 intList.Add(2) 没有装箱 intList.Add(“Three”) 编译错误Dim i As Integer = intList(0) 没有类型转换,泛型,编译时检查 消除运行时错误 提高性能 防止装箱和类型转换 代码重用 方便创建强类型集合 用于构建Framework中常见的数据结构 Dictionary、Queue、List、Stack等等.,Visual Basic 编译器警告 对运行时行为的前期警告,交叠的Catch块或Case语句 递归属性访问 未使用的Imports语句 未使用的本地变量 函数或运算符重载过程未返回值 引用类型上可能的空引用 分解Opti
16、on Strict 后期绑定 隐式类型转换 等等,Background Worker,Structure BackgroundArgsDim arg1 As IntegerDim arg2 As String End StructurePrivate Sub Button1_Click() Handles Button1.ClickDim args As BackgroundArgsBackgroundWorker1.RunWorkerAsync(args) End SubPrivate Sub BackgroundWorker1_DoWork() Handles BackgroundWork
17、er1.DoWork 这是一个后台运行的线程Dim args As BackgroundArgsargs = CType(e.Argument, BackgroundArgs) 现在,在后台线程做点事情e.Result = End SubPrivate Sub BackgroundWorker1_RunWorkerCompleted() Handles Backgroundresult = e.Result End Sub,Visual Basic 2005 专为应用程序框架而设计,应用程序架构的新起点 基于可扩展的类库 以最佳用户体验为目标 自定义IDE的使用体验 项目和项目元素模板 可扩展代码段库 高级语言特性 泛型、附属类型、运算符重载等 帮助设计更出色的类库,开发中心主页: http:/ 实用下载工具主页 http:/ Refactor! For VB2005 Snippet Editor,