传递现有的FileSystemObject或创建多个实例

Jea*_*ett 5 vbscript vba filesystemobject

我有几个使用FileSystemObject的过程.我发现这很方便.

问题:将一个现有的FileSystemObject实例从"主"过程传递给这些其他过程作为参数是否合理,而不是让每个过程创建自己的FileSystemObject实例?

示例:以任何方式更好地执行此操作:

Sub MainSub()
    Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
    Call OtherSub(FSO, myargs)
    ' call other subs and functions that use FileSystemObject
End Sub

Sub OtherSub(FSO, myargs)
    ' Do stuff with FSO
    ' call other subs and functions that use FileSystemObject
End Sub 
Run Code Online (Sandbox Code Playgroud)

我至少看过一个程序员,而不是以下,这是我通常做的事情:

Sub MainSub()
    Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
    Call OtherSub(myargs)
    ' call other subs and functions that use FileSystemObject
End Sub

Sub OtherSub(myargs)
    Dim FSO : Set FSO = CreateObject("Scripting.FileSystemObject")
    Call OtherSub(myargs)
    ' Do stuff with FSO
    ' call other subs and functions that use FileSystemObject
End Sub 
Run Code Online (Sandbox Code Playgroud)

我可以看到做前者的想法,这可能会减少与拥有多个FileSystemObject实例相关的开销.但每次必须将FSO作为参数传递似乎非常麻烦.而且严重的是,开销真的那么大吗?

Ekk*_*ner 1

在我看来,创建许多 FSO 的开销不是问题;问题在于。但是“你不应该重复自己”并且每个CreateObject( "System.FileSystemObject" )[哎呀]都会增加运行时错误的风险。在幕后,只有一个文件系统和一个文件系统对象,因此,如果允许 C/C++ 程序员使用 STDOUT 或 cerr,那么 VBScript/VBA 程序员就有权使用全局FSO(您不能对一个文件系统做任何事情)改变其在其他子/函数中的工作方式的单例 FSO - 除了改变保持变量)。