用别的方法实现
ByVal
无
ByRef
ref
Optional
无
ParamArray
params
无法实现
unsafe
无法实现
fixed
可以看出,VB的关键字比较长,而且使用上也比C#更加严格 。从C#向VB移植的时候,要分外注意哪些VB有而C#没有的关键字以及在C#拼写相同,在VB中拼写不同的关键字(如MustOverride和MustInherit) 。有些关键字如unsafe , 如果C#使用了他们,将无法移植到VB中 。好在这些关键字在商业应用中并不常用 。
属性标签在这两种语言中非常的相似,移植上应该没有任何难度 , 只要知道在C#中用方括号[]表示属性标签 , 而在VB中用的是尖括号 。另外 , 如果要用名称结合传递参数,C#直接使用=号,而VB使用:=(冒号和等号) 。
4、委派类型 。委派类型就是安全的函数指针类型 。在C#中,难以分辨是函数指针在工作还是函数本身在工作,因为他们的语法相同 。当要为一个委派类型的变量复制的时候,直接等于一个函数即可,如:
public delegate void FuncType(Object e)
...
FuncType func;
func=new FuncType(this.SampleFunction1);
//调用
func(something);
//换指向另外一个函数
func=this.SampleFunction2
然而VB中,委派类型就像是一般的对象 , 有它的方法,与函数本身明显不同 。你不能将过程的名字直接赋给一个委派类型的对象,而必须使用AddressOf运算符,下面的例子就是上文C#程序的VB版,注意那些实现不同的地方:
Public Delegate Sub FuncType(ByVal eAs Object)
...
Dim func As FuncType
func=New FuncType(AddressOf Me.SampleFunc1)
‘调用
func.Invoke(something)
‘换指向另外一个函数
func=AddressOf Me.SampleFunction2
5、事件处理 。这是两种语言最大的差别之一,VB传承以前版本强大的事件处理机制,许多语法都比C#更加灵活 。好在无论什么情况,他们之间都是可以互相移植的 。
对于事件定义,两种语言都是一个委派类型加一个事件属性,如:
[C#]
public delegate void MyEventHandler(Object sender,EventArgs e);
public event MyEventHandler MyEvent;
[Visual Basic]
Public Delegate Sub MyEventHandler(ByVal sender As Object,ByVal eAs EventArgs)
Public Event MyEvent As MyEventHandler
VB还支持另外一种更加紧凑的定义方法,只有一条语句:
Public Event MyEvent(ByVal sender As Object,ByVal eAs EventArgs)
移植的时候,要把参数部分分离出来 , 成为一个委派类型,再按照普通方法定义事件即可 。
关于事件响应 , C#与Delphi等语言一样,是动态绑定事件过程的,其语法类似于下:
internal MyClass myobj;
...
myobj=new MyClass();
...
myobj.MyEvent+=this.myobj_MyEvent;
...
protected void myobj_MyEvent(Object sender,EventArgs e)
{
//语句
}
可以看到 , C#是利用运算符连接事件过程和事件属性的 。之后,还可以用-=运算符解除事件过程与事件属性的绑定 。VB不支持运算符重载,但仍然支持这种动态绑定的事件过程,方法是使用AddHandler和RemoveHandler关键字 。如上面黑体部分可以移植为:
AddHandler myobj.MyEvent,AddressOf Me.myobj_MyEvent
解除绑定的语法与此类似 , 只是关键字为RemoveHandler而已 。一定不要忘记过程前面还有一个AddressOf关键字!
动态绑定的事件过程工作起来比较慢,VB支持一种更快的静态绑定事件过程 。一旦为对象设置了静态的事件过程 , 就不能解除绑定 , 一般大多数情况都是如此 。语法如下:
推荐阅读
- 新电视图片为什么会昏昏的,新买的智能电视图像为什么不清晰
- sqlserver动态行列转换,sqlserver行列转换方法
- 拍摄pop什么意思,pop摄影
- 战略型游戏pc,电脑战略性游戏
- vb.net导入已有窗体 vb装入窗体
- Oracle用户空间查询,oracle怎么查用户权限
- 关于hbase数据同步方案的信息
- python升降排列函数 python升降序排列数字
- 如何将代码复制到java,如何将代码复制到网页的HTML中