2009-08-27 56 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是一个免费的加载项,它具有允许将公共变量转换为属性的功能。