2011-06-28 14 views
5

FileSystemObject kullanan birkaç yordam var. Ben oldukça uygun buluyorum.Varolan FileSystemObject iletin veya birden çok örnek oluşturun

Soru: Her yordam kendi DosyaSistemObject örneğini oluşturmaktan ziyade, varolan bir FileSystemObject örneğini bir "ana" prosedürden argüman olarak diğer prosedürlere aktarmak mantıklı mıdır?

Örnek: Bunu yapmak için daha iyi herhangi bir şekilde: Ben en az bir programcı gördük

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 

yapmak yerine genelde ne aşağıdakilerden hangisi daha:

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 

Eski yapıyı gerçekleştirme fikrini, bunun, birden çok FileSystemObject örneğinin bulunmasıyla ilişkili ek yükü potansiyel olarak azalttığını görebiliyorum. Ancak FSO'yu her seferinde bir argüman olarak geçmek zorunda olmak çok zor görünüyor. Ve cidden, havai gerçekten bu kadar büyük mü? Bence birçok FSO yaratma havai ise

cevap

1

sorun değildir; ama "kendinizi tekrar etmemelisiniz" ve her bir CreateObject("System.FileSystemObject") [oops], bir çalışma zamanı hatası riskini artırır. C/C++ programcıları STDOUT veya CERR kullanmaya izin verilmesi halinde, bir VBScript/VBA programcısı küresel FSO hakkına sahiptir böylece kaputun altında (eğer bir şey yapamaz, tam olarak bir dosya sistemi ve bir dosya sistemi nesne yoktur diğer alt/fonksiyonlardaki çalışmalarını değiştiren tek bir FSO'ya (tutma değişkenini zaplamak hariç).

1

ben ...

Set c = New MyClass 
c.MainSub 

Class MyClass 

    Dim fso 

    Sub Class_Initialize 
     Set fso = CreateObject("Scripting.FileSystemObject") 
    End Sub 

    Sub Class_Terminate 
     Set fso = Nothing 
    End Sub 

    Public Sub MainSub()  
     OtherSub myargs 
     ' call other subs and functions that use fso 
     ' or use fso here 
    End Sub 

    Public Sub OtherSub myargs 
     ' Do stuff with fso here or call another sub in the class 
    End Sub 
End Class 

ziyade denizaltıya alt yaklaşık parametreleri geçen daha sınıfta şeyleri tamamlamayı tercih ederler.

+1

Sahte OOP. Bunu severim. –

2

Geçenlerde böyle bir şey yapmış ve şahsen mümkün tek bir dosya sistemi nesne kullanmayı tercih ediyorum. Dosyaların arasında, açık dosya tanıtıcısına sırayla yazılan işlevler arasında geçiş olduğunu düşünüyorum. Fonksiyonlarınızı/subs tanımlarken

, ByRef anahtar kelimeyi kullanarak dosya sistemi nesne geçmek emin olun. Bir dosya hiyerarşisi gezindiğini eğer bu kabul edilemez

sadece zaman olduğunu ve FSO aynı dizin korumak gerekir. Tek FSO bellek gereksinimleri günümüz bilgisayarlarında önemsiz olduğunu, ancak, unutulmamalıdır ve/bu nesneleri yok eder yaratan bir işlevi çağırmak defalarca bir özyinelemeli işlevini kullanın veya gerekirse sadece performans kazancı göreceksiniz.

İlgili konular