VB.NET 对运算法支持的还是不够彻底

一个简单的例子:

None.gif Dim  pt  As   New  Point( 0 0 )
None.gifpt 
+=   New  Size( 10 10 )
None.gif

C# 中没有问题。在 VB.NET 中就不能编译,错误是
 
Operator '+' is not defined for types 'System.Drawing.Point' and 'System.Drawing.Size'.

其实看一下 Point 的il 代码,已经有了一个加法的重载

None.gif .method  public  hidebysig specialname  static  
None.gif        valuetype System.Drawing.Point  op_Addition(valuetype System.Drawing.Point pt,
None.gif                                                    valuetype System.Drawing.Size sz) cil managed
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif  
// Code size       36 (0x24)
InBlock.gif
  .maxstack  8
InBlock.gif  IL_0000:  ldarga.s   pt
InBlock.gif  IL_0002:  call       instance int32 System.Drawing.Point::get_X()
InBlock.gif  IL_0007:  ldarga.s   sz
InBlock.gif  IL_0009:  call       instance int32 System.Drawing.Size::get_Width()
InBlock.gif  IL_000e:  add
InBlock.gif  IL_000f:  ldarga.s   pt
InBlock.gif  IL_0011:  call       instance int32 System.Drawing.Point::get_Y()
InBlock.gif  IL_0016:  ldarga.s   sz
InBlock.gif  IL_0018:  call       instance int32 System.Drawing.Size::get_Height()
InBlock.gif  IL_001d:  add
InBlock.gif  IL_001e:  newobj     instance 
void System.Drawing.Point::.ctor(int32,
InBlock.gif                                                                 int32)
InBlock.gif  IL_0023:  ret
ExpandedBlockEnd.gif}
  //  end of method Point::op_Addition
None.gif


无奈只好改成:
None.gif          Dim  pt  As   New  Point( 0 0 )
None.gif        pt 
=  Point.op_Addition(pt,  New  Size( 10 10 ))
None.gif

查了一下,msdn mag 最新的一期提到了这个问题,其实原因很简单,vb.net 的compiler 还没有100% 对运算符重载支持的足够好。

原文地址:http://www.msdn.microsoft.com/msdnmag/issues/04/12/AdvancedBasics/default.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值