C#& VB6:如何将'with'语句转换为C#?

时间:2010-01-15 11:59:33

标签: c# vb6

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

http://pastebin.com/f16e19351

我已经尝试了自己并且到目前为止:

http://pastebin.com/f7ca199f0

编辑:我正在尝试翻译的代码存在于此处: http://www.codeproject.com/KB/vb-interop/MouseHunter.aspx

9 个答案:

答案 0 :(得分:7)

您还没有显示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

答案 1 :(得分:3)

我不太确定,但我认为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#中的这个构造称为Object Initializer

答案 2 :(得分:2)

喜欢这样

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

变为

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

答案 3 :(得分:1)

我认为你离它更近了:

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

答案 4 :(得分:1)

我可以致电您的提案选项A

  1. 创建用于处理Windows挂钩的DLL的社区VB6 code
  2. 将其翻译为C#
  3. 我可以建议选项B和选项C,我认为这会更容易吗?

    选项B
    1.从Microsoft's C# code开始处理Windows挂钩。
    2.根据需要调整它,查看API调用VB6 code makes

    选项C
    1.从community code获取构建的VB6 DLL 2.通过Interop从新的C#应用​​程序调用该DLL。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

没有C#等价物。

答案 7 :(得分:0)

难道你不能只将LEFT_UP的类型改为bool吗?

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

答案 8 :(得分:0)

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

即使你有一个问题,你显然也试图将布尔值分配给短数据类型。

EventThief课程中有什么内容?你能简单地将LEFT_UP字段设为布尔值吗?