Chinaunix首页 | 论坛 | 博客
  • 博客访问: 356007
  • 博文数量: 102
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 1116
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-29 16:21
文章分类

全部博文(102)

文章存档

2014年(10)

2011年(1)

2008年(2)

2007年(89)

我的朋友

分类: C#/.net

2014-07-01 20:32:38

 

1、 Overrides overloads shadows 标识符区别

Overrides关键字用来实现类继承中的多态,基类中声明的过程、函数在子类中被覆盖重新定义,可以使用overridable mustoverride 来修饰基类中的过程、函数,默认是NotOverridable

Overloads关键字实现类中过程或者函数的重载,即一个过程或函数可以定义为多个同名过程,只是参数类型不同

Shadows关键字则可以隐藏基类中的成员,在子类中使用同名的成员可以隐藏基类中任何类型的同名成员,外部访问的时候子类中的隐藏成员对基类是不可访问的,而子类也无法访问基类中的隐藏成员,若在子类中将隐藏定义为private的,隐藏无效

2、 类型转化使用CtypeTryCastDirectCast

3、 StaticShared的区别

两者的作用域不同,shared类似于C++中的static,这里的static只能对局部变量使用,这意味着 Static 变量的声明上下文必须是一个过程或过程中的块,而不能是源文件、命名空间、类、结构或模块。不能在结构过程内使用 Static

4、 VB中读写文件使用GetPutLine InputPrint

5、 ByvalByRef的区别

传值和传引用。

前者对于基本类型的参数,不会改变其值,对于对象来说,会改变对象中的成员变量,基于后期绑定的缘由,传入的对象和函数(过程)中使用的对象指向的是同一个东东,而不是像C++那样的简单COPY

后者则是完全引用

6、 MyClass可以保证不管该语句在类继承中的次序,在外部调用包含该语句的过程或者函数的时候,只要对象类别是该类,那么就一定是调用该函数,而不管在继承层次中是否有同名的其它过程或者函数,这是myclassme的区别

7、 类中重载运算符 (必须声明为Public Shared

Public shared Operator +(class A,Class A) as Class A

如果已定义了类或结构,则可以定义类或结构的类型与其他数据类型(如 IntegerDouble 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 变为IntegerInteger变为short,如果有as any,则需要声明多个,在as any处使用as stringas integer

13、      文件操作:System.IO.File FileSystem My.Computer.FileSystem

14、      判断Null使用IsDBNull函数,提供了IsNotOrNot操作符以提高预算性能;VBWendEnd 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中用法不同。

阅读(1544) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~