2016-08-02 4 views
2

Я часто использую Filesystemobject в своем проекте во многих модулях, и я не хочу создавать его каждый раз, когда это необходимо. Поэтому я попробовал его с публичным свойством, которое назначает новый файл Fileystemobject для FSO, если он не существует. Но каждый раз, когда выполняется 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

Ницца, спасибо большое, я знал, что Static не может быть абсолютно бесполезным. –

+0

Спасибо Винсент за разъяснение –

+0

Просто любопытно: делает ли это интересную технику более рентабельным? –

0

Свойство может быть статическим, но если объект отсутствует, он сбрасывается.

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

должен вести себя, как вы ожидаете

+0

Спасибо за попытку, но я хотел решение, где я не должен тускнеть FSO в каждом модуле/к югу, потому что я использую его широко над весь проект. –

Смежные вопросы