分类: C#/.net
2014-07-01 20:32:38
1、 Overrides、 overloads 、shadows 标识符区别
Overrides关键字用来实现类继承中的多态,基类中声明的过程、函数在子类中被覆盖重新定义,可以使用overridable 、mustoverride 来修饰基类中的过程、函数,默认是NotOverridable的
Overloads关键字实现类中过程或者函数的重载,即一个过程或函数可以定义为多个同名过程,只是参数类型不同
Shadows关键字则可以隐藏基类中的成员,在子类中使用同名的成员可以隐藏基类中任何类型的同名成员,外部访问的时候子类中的隐藏成员对基类是不可访问的,而子类也无法访问基类中的隐藏成员,若在子类中将隐藏定义为private的,隐藏无效
2、 类型转化使用Ctype、TryCast、DirectCast
3、 Static和Shared的区别
两者的作用域不同,shared类似于C++中的static,这里的static只能对局部变量使用,这意味着 Static 变量的声明上下文必须是一个过程或过程中的块,而不能是源文件、命名空间、类、结构或模块。不能在结构过程内使用 Static。
4、 VB中读写文件使用Get、Put、Line Input、Print
5、 Byval和ByRef的区别
传值和传引用。
前者对于基本类型的参数,不会改变其值,对于对象来说,会改变对象中的成员变量,基于后期绑定的缘由,传入的对象和函数(过程)中使用的对象指向的是同一个东东,而不是像C++那样的简单COPY
后者则是完全引用
6、 MyClass可以保证不管该语句在类继承中的次序,在外部调用包含该语句的过程或者函数的时候,只要对象类别是该类,那么就一定是调用该函数,而不管在继承层次中是否有同名的其它过程或者函数,这是myclass和me的区别
7、 类中重载运算符 (必须声明为Public Shared)
Public shared Operator +(class A,Class A) as Class A
如果已定义了类或结构,则可以定义类或结构的类型与其他数据类型(如 Integer、Double 或 String)之间的类型转换运算符。将类型转换定义为类型或结构中的 过程。所有转换过程必须为 Public Shared,并且每个转换过程必须指定 或 。例如:
Public Structure digit
Private dig As Byte
Public Sub New(ByVal b As Byte)
If (b < 0 OrElse b > 9) Then Throw New _
System.ArgumentException("Argument outside range for Byte")
Me.dig = b
End Sub
Public Shared Widening Operator CType(ByVal d As digit) As Byte
Return d.dig
End Operator
Public Shared Narrowing Operator CType(ByVal b As Byte) As digit
Return New digit(b)
End Operator
End Structure
8、 Like关键字可以进行模式匹配
9、 手动设置事件的处理
AddHandler object.event, addressof Method(或者New system.EventHandler(addressof(Method)))与之相对应的便是removehandler
10、 绘制图形使用System.Drawing.Graphics,重载OnPaint事件
11、 错误处理结构
Try
Catch e as XXexception
处理代码(使用throw e 不处理)
Catch e as YYException
Catch else
Finally
End try
12、 引用API注意其中的变量类型,Long 变为Integer,Integer变为short,如果有as any,则需要声明多个,在as any处使用as string和as integer
13、 文件操作:System.IO.File类 FileSystem类 My.Computer.FileSystem
14、 判断Null使用IsDBNull函数,提供了IsNot、OrNot操作符以提高预算性能;VB中Wend被End While替代
15、 System.Collections.Generic提供了许多关于集合的范型接口
16、 接口定义
Interface XXXX
End interface
继承定义
Class A
Inherits Class B
Implements C
这里的C是接口类型
17、 线程
System.Threading.thread
使用syncLock来控制有并发冲突的代码段
使用BackGroundWorker组件来实现单独线程
相关方法:
RunWorkerAsync,可以传入具体操作需要的参数,
DoWork 在这个事件中处理具体工作,不要操作用户界面对象;
ProgressChanged事件显示处理进度
RunWorkComplete事件处理完成时触发,可以与用户界面交互
如果在运行中取消了线程执行,那么该组件的cancel属性不一定设为true,还需要检测组件的CancellationPening是否为true
只要有可能,仅在创建它的线程上执行控件的各种方法,若须从另一线程调用组件的方法,必须使用Invoke/beginInvoke方法,也就是使用委托delegate方法;
Public Delegate Sub FHandler(ByVal Value As Double, ByVal _
Calculations As Double)
由于控件或窗体的方法回调到调用过程,so为了防止死锁,不要用synclock语句锁定操作窗体或控件的线程;
在使用组件中线程的时候,由组件传送出来的变量可利用事件来实现
18、 使用Main过程来启动项目
Shared Sub Main()
Applicatin.run(new XXXXX)
End Sub
19、 打包时加入卸载程序
方法1:
在打包项目中添加msiexec.exe文件,一般在windows/system32下面,创建该文件的快捷方式,重命名卸载,更改此快捷方式的Arguments为“/x{产品ID}”,产品ID的值为打包项目的ProgramCode属性值;
方法2:
生成控制台应用程序uninst.exe
Module uninstall
Sub Main()
Dim MyProcess as New Process
If System.Environment.OSVersion.ToString.IndexOf(“NT 5”) then
MyProcess.Start(“msiexec”,”/x{GHJ-743JK-j87-454GM6L-OYV}”)
''换成自己的ProductCode
End If
MyProcess.Close()
End Sub
End Module
将Bin目录中的exe文件打包到项目中,创建其快捷方式
20、 friend关键字
在VB6中,该关键字用在窗体或者类模块中,不能在标准模块中使用。被friend定义的过程或变量可以被工程内的所有对象访问,但是不能被工程外对象访问。Friend过程不会出现类的类型库中,一个friend过程不能被后期绑定。
C++中使用它定义友元,与VB中用法不同。