VB.NET编写
目 录
1 OPC客户端编程,客户端配置 5
2 硬件接线 4
3 主要功能 4
4 程序执行顺序 5
4.1 T1 系统扫描周期1.0ms 5
4. 1.1 1 TDC程序自动加载,程序初始化 5
4. 1.2 2 T1_ANALOG_IN模拟量输入 5
4. 1.3 3 T1_Signal_Process信号处理(轧制力/液压选择、咬钢信号、落底位置TSAVE) 7
4. 1.4 4 T1_RELA_AGC 相对AGC计算 9
4. 1.4.1 模块功能 5
4. 1.4.2 模块输入数据 5
4. 1.4.3 模块输出数据 5
4. 1.4.4 模块逻辑 5
4. 1.4.5 程序代码说明 5
1. VB.NET 基础知识
1. 使用#Region指令和#End Region指令也可以创建自己的代码区域。
2. Inherits 派生类 关键字
3. InitializeCOMponent() 初始化组件
4. 事件对象关键字 WithEvents
5. Handles 绑定事件处理函数或过程
WithEvents 语句和 Handles 子句为指定事件处理程序提供了声明
。
1) 用 WithEvents 关键字所声明对象引发的事件
2) 关键字所声明对象引发的事件可以由任何过程用该事件的 Handles 语句来处理WithEvents 语句和 Handles 子句常常是事件处理程序的最佳选择,因为它们所用的声明语法使得对事件处理的编码和调试更加容易,并使人可以更加轻松地阅读它。可是,要注意使用 WithEvents 变量时有以下限制:
l 不能把 WithEvents 变量用作对象变量。即,不能将它声明为 Object,在声明变量时必须指定类名称。
l 由于共享事件未绑定到类实例,所以不能使用 WithEvents 以声明方式处理共享事件。同样,不能使用 WithEvents 或 Handles 处理来自 Structure 的事件。在这两种情况下,您可以使用 AddHandler 语句处理这些事件。
l 不能创建 WithEvents 变量数组。
l WithEvents 变量允许单个事件处理程序来处理一类或多类事件,或一个或多个事件处理程序来处理同类事件。
6. 代码添加一般在 InitializeComponent() 初始化组件 中完成 大部分组件初始化工作。
7. Me.SuspendLayout() 在将按钮添加到该窗体之前,需要停止该窗体的布局引擎。
2. 公共语言运行时 CLR
1. .NET 框架示意图
2. CLR 图示
3. 首先,源代码经编译器被翻译为 Microsoft 中间语言 (MSIL,简称IL),这是一组可以有效地转换为本机代码且独立于 CPU 的指令。当编译器产生 MSIL 时,它也产生元数据。元数据描述代码中的类型,包括每种类型的定义、每种类型的成员的签名、代码引用的成员和运行库在执行时使用的其他数据
4. 这些元数据通过元数据引擎的创建后,附加地与由不同的编译器编译的代码进行链接,其结果是包含IL代码的EXE或DLL文件保存到磁盘上,编译器的工作到此结束。
5. 在可以执行中间语言 (IL)代码之前,它必须经过 .NET 框架下的实时编译器 (JIT,Just-In-Time)转换为本机代码(本机代码是指运行于 JIT 编译器所在的同一计算机结构上的 CPU 特定的代码)。所以,刚才编译出来的IL代码(包含在EXE或DLL文件中)和来自.NET基类库的相应功能通过类装载器被放置到一起,再经过JIT编译器转换为本机代码。
6. 但要注意的是,在JIT编译器工作之前,还必须通过使用检验器对其组合代码进行类型安全测试,验证通过后,才能经JIT编译器转换为本机代码
7. 通常CLR使用下列条件来验证代码是否为类型安全: .对类型的引用与被引用的类型严格兼容。 .在对象上只调用正确定义的操作。 .标识与声称的要求一致。 .验证过程中检查IL代码,尝试确认该代码只能通过正确定义的类型访问内存位置和调用方法
8. 最后中间语言代码由操作系统中.NET Framework的组件CLR管理和执行。
总之,公共语言运行时(CLR) 能够使跨语言交互的组件和应用程序的设计变得很容易. 用不同语言编写的对象可以互相通讯,并且它们的行为可以紧密集成. 例如, 可以定义一个类,然后使用不同的语言从原始类派生类或调用原始类的方法. 还可以将类的实例传递到用不同的语言编写的类的方法. 这种跨语言集成之所以成为可能,是因为公共语言运行时(CLR) 在.NET 框架中起着至关重要的作用.
8. 类型 类型有两种:引用类型 和 值类型;引用类型可以简单地认为是一个类的对象 值类型可以认为是 结构
类型包含:字段、方法、属性
9. 公共语言运行时 CLR 是一种运行机制,它提供了一个平台 提供了一些服务
.NET结构
C#语言不能孤立对待,而必须和.NET Framework一起考虑
C#编译器专门用于.NET,这
示在C#中编写的所有代码总是在.NET Framework中运行
C#的结构和方法论反映了.NET的基础性方法论
在许多情况下,C#的特点语言特性取决于.NET的特性,或依赖于基类
1.1 .NET概述
理解.NET Framework最简单的方式是把它看作执行代码的环境
.NET承担了双重角色:管理代码的执行和为代码提供服务
.NET运行时:也称为公共语言运行时(COMmon Language Runtime)或CLR,它实际管理代码
受管制的代码:在.NET环境中运行的任何代码都称为受管制的代码(unmanaged code),.NET外部的其他代码也运行在Windows上
这些代码称为未受管制的代码(unmanaged code)
中间语言(IL):在.NET运行时加载和运行代码时,这种语言确定代码的位置
公共类型系统(CTS):为了实现语言的互操作性,必须有一组各种语言都认可的基本数据类型,这样才能对所有语言进行标准化
处理,CTS就提供了这个功能,还提供了定义定制类的规则
.NET基类:这是一个扩展的类库,它包含预先写好的代码,执行Windows上的各种任务
装配件:存储编译好的受管制的代码的单元
装配件高速缓冲存储器:存储共享装配件的磁盘区域
公共语言规范(CLS):确保代码可以在任何语言中访问的最小标准集合
反射:因为装配件完全自我描述,理论上可以编程访问装配件元数据,这种技术称为反射
Just-in-Time(JIT)编译:表示执行编译过程的最后阶段,即从中间语言转换为内部机器代码
装配件清单:存储包含元数据的装配件的区域
应用域:CLR允许不同代码在同一个过程空间中运行的方式
无用存储单元收集:CLR清理不再需要的内存的方式,应用程序不必负责内存的释放
1.2 编译和运行程序
在程序运行前必须编译,与以前的可执行文件和DLL文件不同,编译好的代码不包含汇编语言指令,而是包含Microsoft Interme
diate Language(MSIL或IL)指令,中间语言是一种相当低级的语言,可以快速转换为内部机器码(JIT编译)
过去完整的软件包有一个可执行程序,其中包含主程序的启动入口点,多个库或COM组建,而.NET中程序包含许多装配件,其中
一个装配件被指定为一个可执行程序,包含主程序的启动入口点,其他装配件则指定为库
运行程序时,.NET运行时会加载第一个装配件
代码中只有实际要使用的部分才会被编译,这个过程称为just-in-time编译
运行受管制的代码的优点:安全/垃圾收集避免内存泄漏/应用域使不同的程序在同一过程彼此独立又能彼此通信
1.3 中间语言
Java源代码被编译为Java字节代码,然后解释执行,而中间语言代码被编译为内部机器码则不会损失一些相关性能
中间语言的目的不仅仅是获得平台的独立性,而且要获得面向对象环境中的语言独立性
由于对语言独立性和交互操作性的需求,所以中间语言要比Java字节代码复杂得多,类和继承性是在中间语言中定义的
对中间语言的值类型,变量直接保存其数据,而对于引用类型,变量仅保存地址,对应的数据可以在该地址中找到
引用类型的实例总是存储在一个名为堆的内存区域中,值类型一般存储在堆栈中,但如果值类型在引用类型中声明为字段,它们
就内联存储在堆中
中间语言的一个重要方面是它建立在非常强的类型化功能上,所有的变量都清晰地标记为属于某个特定数据类型
中间语言的主要特性
:
1,具有类在单一继承实现的面向对象编程
2,接口
3,值和引用类型
4,通过异常来处理错误
5,非常强大的类型系统
1.4 语言的互操作性
COM是一个二进制标准,允许组件示例其他组件,调用它们的方法或属性,而无需考虑编写相关组件的语言
语言互操作性的真正含义是用一种语言编写的类应能直接与用另一种语言编写的类通信
公共类型规范的含义是中间语言有一组设计合理且内容丰富的预定义数据类型集
对于每种值类型,都有一个对应的引用类型来表示该类型的封箱(boxing)堆版本
公共语言规范(CLS)和公共类型系统(CTS)一起确保语言的互操作性
1.5 .NET基类库
.NET基类库是Microsoft已经编写好的一个内容丰富的受管制的代码类集合,它可以完成以前要通过Windows API来完成的绝大
多数任务
.NET基类包括:
1,IL提供的核心功能,例如,公共类型系统中的基本数据类型
2,Windows GUI支持,控件等
3,Web窗体(ASP.NET)
4,数据访问(ADO.NET)
5,目录访问
6,文件系统和注册表访问
7,连网和Web浏览
8,.NET属性和反射
9,访问Windows操作系统、环境变量等各个方面
10,访问不同语言的源代码和编译器
11,COM互操作性
12,制图技术(GDI+)
大部分.NET基类实际上都是用C#编写的
1.6 .Net Framework的组件
装配件是包含编译好的、面向.NET的代码的逻辑单元
可执行代码和库代码使用相同的装配件结构,唯一的区别是可执行的装配件包含一个主程序入口点,而库装配件则不包含
名称空间是.NET避免类名冲突的一种方式
应用域是分离组件的一种方式,它不会导致因在过程之间传送数据而产生性能问题
JIT编译器是.NET Framework的一个主要组成部分,也是Microsoft致力于确保受管制的代码比不受管制的代码的性能更高的
重要方面
Java字节代码是解释性的,而IL是编译性的
除了运行时的服务外,.NET还可以使用许多工具帮助开发.NET应用程序,包括:
1,Visual Studio.NET集成开发环境
2,C#、VB.NET和C++命令行编译器
3,ILDASM检测装配件工具
无用存储单元收集器是.NET的内存管理方式,特别是它可以恢复正在运行中的应用程序需要的内存
让应用程序代码负责释放内存是低级、高性能的语言使用的技术,例如C++
.NET可以根据异常使用相同的机制处理错误情况,这与Java和C++是一样的
.NET提供的安全机制是基于代码的安全性,可以在运行代码前指定代码需要什么安全权限
属性最初是为了在程序中提供与某些项目相关的外部信息,以便编译器在编译时使用
在.NET中,属性新增内容是一个机制,该机制可以在定义自己源代码的属性地方存在,这些用户定义的属性将和对于数据类型
或方法的方法数据放在一起,在文档说明书中使用它们,和反射技术一起使用,以根据属性执行编程任务
装配件存储了元数据,包括在装配件中定义的所有类型和这些类型的成员的细节,使用System.Reflection名称空间中的.NET
基类可以编程访问这些元数据
1.7 语言和技术
C#是一种新的面向对象编程语言,专门用于.NET运行时
C#编译器只能生成受管制的代码,也可以使用.NET基类
C++有许多Microsoft对Windows的特定扩展,以后还要加入更多的扩展内容,来支持.NET Framework
现有的C++源代码会继续编译为内部可执行代码,不会有修改,但它会独立于.NET运行时
J++是为了继续支持向后兼容性才保留下来的,它没有升级到.NET上
至于以前的J++代码,Microsoft提供JUMP(Java User Migration Path)工具,其口号是“跳跃到.NET”
这些工具允许Visual Studio.NET和现有的J++代码一起工作
还可以使用迁移工具,把J++代码自动转换为C#代码
Visual Basic在升级到.NET时,经历了一番脱胎换骨的变化,早期版本的Visual Basic 6并不适合于运行.NET程序
ASP页面是孤立于.NET之外的,但是.NET升级了IIS以支持ASP.NET页面,其中的代码可以直接使用VB.NET、C#或JScript.NET
编写,并编译为类,通过生成相应的HTML输出,响应Web请求
脚本语言仍在使用之中,但一般认为它们的重要性在降低,VBA仍用作Office文档和Visual Studio宏语言
可以通过COM互操作性在受管制的代码中使用ADO或OLE DB,与数据源通信,这可能要比使用ADO.NET容易一些
ADO.NET是.NET基类的一个子集,主要用于与数据源通信
.NET基类System.DirectoryServices用于替代ADSI,执行许多相同的功能,但仍可以使用旧的ADSI接口
COM+仍然是一个重要的工具,即使其特性没有在.NET中完全实现
COM组件仍可以使用----.NET组合了COM的互操作性,从而是受管制的代码可以调用COM组件,COM组件也可以调用受管制的代码
1.8 把所有的功能都组合起来
除了just-in-time编译的最后一步外,所有的基本数据类型包装都是在编译时解开而不是运行期间解开的,所以在执行代码时
处理这些包装器不会导致性能损失
1.9 简史
C#主要考虑的是必要的OOP特性,它还具备语言的互操作性----在很大程度上甚至比COM更强大,C++的头文件已经删除,替代
以自我描述的装配件
3. 变量和类型
1. 类型 类型有两种:引用类型 和 值类型;引用类型可以简单地认为是一个类的对象 值类型可以认为是 结构
类型包含:字段、方法、属性
2. 公共语言运行时 CLR 是一种运行机制,它提供了一个平台 提供了一些服务
4. 对象语法综合
1. 用来控制VB.NET基类成员访问的修饰符
Friend : 只在当前项目中可用
private : 只在本类中可用
protected : 在本类和本类的派生类中可用的成员
protected friend:在当前项目和本类的派生类中可用
public :类以外的代码也可以访问
默认值为:public
2. VB.NET基类的继承的语句和说明:语句/修饰符 描述
Inherits: Inherits 语句--指明了当前的类从哪个类继承。Inherits 要害词只用在类和接口中 继承 Inherits
NotInheritable: NotInheritable 修饰符--禁止用作基类
MustInherit: MustInherit修饰符--指明不能建立当前类的实例。这个类只能被继承
Overridable: Overridable 修饰符--答应类的一个属性或方法可以被Override。
Public 方法缺省是 NotOverridable
Overrides: Overrides 修饰符--Override基类的一个属性或方法
NotOverridable: NotOverridable 修饰符 (缺省)- -禁止类的一个属性或方法被Override
MustOverride: MustOverride 修饰符--需要继承的类Override的属性或方法。当使用MustOverride 要害词的时候,方法的定义只包括Sub, Function和 Property 语句。要非凡强调的是,其他任何语句是不答应没有End Sub, End Function或者 End Property 语句。类中带有MustOverride 方法都必须声明为MustInherit。Public 方法缺省值是NotOverridable
Shadows: Shadows 修饰符--答应重新使用被继承的类成员的名字。Shadow不删除继承得来的类的类型成员,它仅仅是使所有被继承的类型成员在派生类中不可使用。Shadow是在派生类中重新声明类成员
3. VB.net 接口 Interface 与继承 Inherits
4. CType函数
CType函数作用于两个参数。第一个参数是将要转换的表达式,第二个参数是目标类型或对象类。注意,第一个参数必须是表达式,不能是类型。
CType函数是一个内联函数,这意味着转换是由已编译的代码执行的,通常不会生成函数调用,这将提高性能。
返回表达式显示地转换为指定的数据类型、对象、结构、类或接口后的结果。
CType(expression,typename)
各部分说明
expression
任何有效的表达式。如果expression的值超出typename允许的范围,将引发异常。
typename
任何在Dim语句的As子句内合法的表达式,即任何数据类型、对象、结构、类或接口的名称。
备注
CType采用内联方式编译,即转换代码是计算表达式的代码的一部分。在某些情况下不需要调用一个过程来完成转换,这会使执行速度更快。
如果没有定义从expression到typename的转换,例如从Integer转换到Date,Visaul Basic将显示一条编译时错误信息。
如果在运行时转换失败,将会引发相应的异常。如果收缩转换失败,最常见的结果是OverflowException。如果未定义转换,将会发生InvalidCastException。例如,如果Exception的类型为Object,并且其运行时类型没有转换为typename,则可能会发生这种情况。
如果expression或typename的数据类型为已经定义的类或结构,则可以在该类或结构中将CType定义为转换运算符。这将使CType用作重载运算符。如果这样做,则可以控制转换在类或结构之间进行的转换的行为,包括可能引发的异常。
重载
CType运算符也可以在代码之外定义的类或结构中重载。如果您的代码需要在这样的类或结构之间进行转换,请确定您了解其CType运算符的行为。
5. 使用下面的关键字可以控制变量的作用域:
●Private:仅适用于类中的代码。
●Friend:仅适用于工程或组件中的代码。
●Protected:仅适用于继承于类的类。
●Protected Friend:适用于工程或组件中的代码,以及继承于工程中或工程外类的类
●Public:适用于类外的代码。
通常,可以使用Private关键字来声明成员变量,使这些变量仅适用于每个类实例中的代码。选择其他选项应格外当心,因为其他几种选项允许类外的代码直接与变量交互作用——也就是说,可能会改变值,而且代码还不知道己发生了这个改变。
6. 传参 (属性、方法)
7. 事件 Handles
VB.NET中可以用Handles将子程序与控件绑定!同时,还要在程序的开始处进行“Protected”声明,以表明该子程序可以在该类方法定义的方法程序、事件代码以及该类的子类的方法程序,事件代码中引用,但不能通过对象引用。
NET Framework和Visual Basic .NET语言的设计者,已做了非常充分的工作以确保你可以在.NET使用事件如同你在Visual Basic 6.0中所做的一样。这就是你可以: * 使用Event关键词声明一个事件 * 使用RaiseEvent语句引发一个事件 * 使用一个WithEvents变量处理事件
8. 构造函数方法
可选参数构造方法
9. 类的析构
10. 共享方法、属性、事件 关键字:shared 例如 Math 类 大部分为共享方法
11. Ll
4.1 T1 系统扫描周期1.0ms
4.1.1 1 TDC程序自动加载,程序初始化
4.1.2 2 T1_ANALOG_IN:模拟量输入
4.3.5.1 模块功能
4.3.5.2 模块输入数据
4.3.5.3 模块输出数据
4.3.5.4 模块逻辑
4.3.5.5 程序代码说明