簡體   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