繁体   English   中英

C#和VB6:如何将“ with”语句转换为C#?

[英]C# & VB6: How to convert 'with' statement to C#?

如何将这段VB6代码转换为C#?

http://pastebin.com/f16e19351

我已经尝试过,到目前为止:

http://pastebin.com/f7ca199f0

编辑:我要翻译的代码在这里存在: http : //www.codeproject.com/KB/vb-interop/MouseHunter.aspx

您还没有显示EventThief代码,这使您很难分辨。 但一般来说:

With expression
   .Foo = a
   .Bar = b
End With

将转化为

var x = expression;
x.Foo = a;
x.Bar = b;

(当然,您可以明确指定类型...)

这里的共同点是expression仅被评估一次。 在您显示的特定代码中,当然不需要额外的变量,因为表达式首先只是局部变量。

您的实际错误似乎仅与EventThief.RIGHT_DOWN等类型有关,而不是与WITH语句有关。

编辑:好的,你现在已经显示原EventThief代码确实使用布尔...但你还没有表现出你的移植 EventThief代码。 你写了:

它说et.LEFT_UP很短

...但是不应该这样。 在最初,它是一个Boolean ,那么为什么您的端口short呢?

VB中的以下内容

With EventStealingInfo
    .RIGHT_DOWN = True
    .RIGHT_UP = True
End With

可以大致翻译成

var EventStealingInfo = new EventThief(){
    RIGHT_DOWN = true,
    RIGHT_UP = true
};

其中RIGHT_UPRIGHT_DOWNEventStealingInfo类中的公共属性。

C#中的这种构造称为对象初始化器

像这样

With EventStealingInfo
    .RIGHT_DOWN = True
    .RIGHT_UP = True
End With

变成

EventStealingInfo.RIGHT_DOWN = true;
EventStealingInfo.RIGHT_UP = true;

我认为您可以走近一点:

EventThief EventStealingInfo = new EventThief()
{
    RIGHT_DOWN = true,
    RIGHT_UP = true
};

我可以将您的提案称为选项A。

  1. 以社区VB6代码创建用于处理Windows挂钩的DLL。
  2. 将其翻译为C#

我可以建议我认为会更容易的方案B和方案C吗?

选项B
1.从Microsoft的C#代码开始处理Windows挂钩。
2.根据需要对其进行调整,查看调用VB6代码的 API。

选项C
1.从社区代码中获取内置的VB6 DLL。
2.通过Interop从新的C#应用​​程序中调用该DLL。

据我所知,C#中没有与With等效的对象,并且在引用对象的成员函数/属性时需要明确列出该对象。

没有等效的C#。

您不能仅将LEFT_UP的类型更改为bool吗?

查看代码和使用EventThief的方式,您可能希望使用标志枚举,以便可以设置各个位,然后进行按位比较。

关键字“ with”只是在设置多个属性时保存重新键入变量名的快捷方式。 C#中没有等效项。

即使您仍然遇到问题,您显然仍试图将布尔值分配给短数据类型。

EventThief类中有什么? 您可以简单地将LEFT_UP字段设为布尔值吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM