2009-08-27 99 views
2

我正在使用VB6中的遺留項目進行工作,所有對象均使用公共變量。 我想將這些公共變量轉換爲私有變量/屬性組合。 有一些工具,這是我能做到這些轉換?(最好是在課堂上一次所有變量)Visual Basic 6公共變量屬性

感謝

回答

5

不要做轉換,這是不需要的。 VB編譯器自動爲所有公開的類(即所有在COM DLL中導出的類)自動執行此操作,並且對所有其他字段不需要,因爲這些僅在內部使用,並且字段和用戶屬性之間沒有區別。

VB6是唯一一個這樣做的語言,它根本不允許公開字段,並且隱式轉換它們。

回顧一下:VB6中的公共變量沒有問題,因爲公共變量的常見缺點並不適用於它們。特別是,它們不會破壞封裝。

+0

是的,我知道這一點,但我也必須在這些屬性中設置一個特殊的變量(這不是我非常喜歡的東西,但我必須這樣做) – Cicik 2009-08-27 08:56:56

+0

+10!一個有趣的小錯誤證明了編譯器是這樣做的。假設你有一個例程Convert(ByRef x as Double),它修改了它的參數x。如果您使用公共變量(如Convert(myobj.Prop))調用它,則更改的值*不會被存儲到公共變量中。這是因爲它像Konrad所描述的那樣被包裝爲屬性。我相信事實上這也發生在私人班和公共班上。正如康拉德所說,使用公有字段不會破壞封裝,因爲它們可以在任何時候被完整的屬性替換,而不會改變客戶端的行爲。 – MarkJ 2009-08-27 08:59:36

+0

如果您將公共變量遷移到公共屬性,它仍然堅持要破壞二進制兼容性: – rpetrich 2009-08-30 11:43:01

1

我不知道任何VB6重構工具,但我會處理這個問題通過編寫一個腳本來掃描源文件,搜索匹配「Public Dim ...」的行並將這些行替換爲適當的「Private Dim ...」和屬性訪問器。

+0

好的答案 - 儘管Dim是可選的,但只需將'Public X'或'Public X as sometype'寫入是合法的。 – MarkJ 2009-08-27 11:31:23

3

MZ-Tools是一個免費的加載項,它具有允許將公共變量轉換爲屬性的功能。