2016-08-02 97 views
2

我經常在我的項目中使用Filesystemobject,在很多模塊中,我不想在每次新建時(在我需要時)實例化它。所以我用一個Public屬性嘗試了它,如果它不存在,它將爲FSO分配一個新的Filesystemobject。但是每次Property Get被執行時,FSO都沒有,並且被新實例化。屬性Get即使靜態也不會保留值

Public Static Property Get FSO() As Object 
    If FSO Is Nothing Then 
     Set FSO = CreateObject("Scripting.Filesystemobject") 
    End If 
End Property 

Sub Test() 
'at every line, the FSO is created again instead of using the old 
Debug.Print FSO.GetTempName 
Debug.Print FSO.GetTempName 
Debug.Print FSO.GetTempName 
Debug.Print FSO.GetTempName 
Debug.Print FSO.GetTempName 
Debug.Print FSO.GetTempName 
End Sub 

我只是用它錯了還是不是用這種方式? 在此先感謝。

回答

3

Static只適用於內部的局部變量。你將不得不使用一個局部變量來獲得期望的結果:

Public Static Property Get FSO() As Object 
    Dim fso_obj As Object 
    If fso_obj Is Nothing Then 
     Set fso_obj = CreateObject("Scripting.FileSystemObject") 
    End If 
    Set FSO = fso_obj 
End Property 
+0

不錯,非常感謝,我知道靜態不能完全無用。 –

+0

感謝文森特的澄清 – 2016-08-02 10:38:59

+0

只是好奇:這種有趣的技術是否帶來可觀的性能提升? –

0

該屬性可以是靜態的,但如果該對象不是,則會重置該屬性。

Sub Test() 
dim f as new fso 
Debug.Print f.GetTempName 
Debug.Print f.GetTempName 
Debug.Print f.GetTempName 
End Sub 

應該表現得像你希望當應用到屬性get

+0

感謝您的嘗試,但我想一個解決方案,其中我不必在每個模塊/子FSO暗淡,因爲我廣泛地在使用它整個項目。 –

相關問題