Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class Visual Basic 6将公共变量转换为属性_Class_Properties_Vb6_Refactoring - Fatal编程技术网

Class Visual Basic 6将公共变量转换为属性

Class Visual Basic 6将公共变量转换为属性,class,properties,vb6,refactoring,Class,Properties,Vb6,Refactoring,我正在用VB6开发一个遗留项目,这个项目有一个巨大的对象,所有的对象都带有公共变量。 我想将这些公共变量转换为私有变量/属性组合。 是否有一些工具可以用来进行这些转换?(最好是一次将类中的所有变量转换为一个变量) 谢谢我不知道有什么VB6重构工具,但我会编写一个脚本来扫描源文件,搜索与“Public Dim…”匹配的行,并将这些行替换为适当的“Private Dim…”和属性访问器来解决这个问题。不要进行转换,这是不需要的。VB编译器会自动为所有公开的类(即COM DLL中导出的所有类)执行此操

我正在用VB6开发一个遗留项目,这个项目有一个巨大的对象,所有的对象都带有公共变量。 我想将这些公共变量转换为私有变量/属性组合。 是否有一些工具可以用来进行这些转换?(最好是一次将类中的所有变量转换为一个变量)


谢谢

我不知道有什么VB6重构工具,但我会编写一个脚本来扫描源文件,搜索与“Public Dim…”匹配的行,并将这些行替换为适当的“Private Dim…”和属性访问器来解决这个问题。

不要进行转换,这是不需要的。VB编译器会自动为所有公开的类(即COM DLL中导出的所有类)执行此操作,其他所有字段都不需要此操作,因为这些字段仅在内部使用,用户的字段和属性之间没有区别

VB6是唯一做到这一点的语言,它完全不允许公共字段,并隐式地转换它们


总而言之:VB6中的公共变量没有错,因为公共变量通常的缺点不适用于它们。特别是,它们不会破坏封装。

是一个免费的外接程序,它有一个允许将公共变量转换为属性的功能。

是的,我知道这一点,但我还必须在这些属性中设置一个特殊变量(我知道这不是一件很好的事情,但我必须这样做)+10!一个有趣的小问题证明了编译器可以做到这一点。假设您有一个例程Convert(ByRef x为Double),它修改它的参数x。如果使用公共变量调用它,比如Convert(myobj.Prop)——更改后的值不会存储到公共变量中。这是因为正如Konrad所描述的,它被包装为一个属性。我相信事实上,这种情况也发生在私人课程和公共课程中。因此,正如Konrad所说,使用公共字段不会破坏封装,因为它们可以随时替换为完整属性,而不会改变客户端的行为。如果您将公共变量迁移到公共属性,它仍然坚持破坏二进制兼容性:(回答很好-虽然Dim是可选的,但只需将
Public X
Public X写入sometype
是合法的。