VB6 sınıf modüller parametreli kurucular yok. Bunun için hangi çözümü seçtiniz? Facory yöntemlerini kullanmak bariz bir seçim gibi görünüyor, ama beni şaşırtmak!VB6'daki müteahhitlik eksikliğiyle nasıl baş ettiniz?
cevap
Ben genellikle aynı modülde (.BAS uzantısı) deki ilgili sınıflar için "kurucular" koymak fabrika yöntemleri sopa. Ne yazık ki, bu, VB6'daki normal nesne oluşturmaya erişimi gerçekten sınırlayamadığınızdan, optimal olmaktan çok uzaktır - sadece nesnelerinizi fabrikada yaratmanın bir noktasını yapmak zorundasınız. Daha kötü yapan şey, gerçek nesne ile fabrika yönteminiz arasında zıplamak zorunda kalmaktır, çünkü IDE'deki organizasyonun kendisi en iyi şekilde hantaldır.
Ya da fabrika yöntemini sınıfa eklemenin ne demek? Fabrika modüllerini bir modülde koymak, uygulamaya özel hale getirir. – Dabblernl
@Dabblernl - Ama sonra onları Java'nın 'public static' değerine denk getirmek zorundasın, değil mi? VB6'nın statik yöntemleri yoktur. – derekerdmann
Eh, statik bir sınıfa gerek yok. Fabrika yöntemine erişmek için bir örnek oluşturmanız gerekir, ancak nesnenin bağımlılıklarını kullanamayacağınız için IMHO – Dabblernl
Kullanılabilir sınıf başlatıcısı nasıl kullanılır? Bu parametresiz yapıcı gibi davranır:
Private Sub Class_Initialize()
' do initialization here
End Sub
Hiçbir parametreyi kabul etmemesi, bir kurucu olarak işe yaramaz hale getirir. Gerçekten sadece birkaç şey ayarlamanıza izin verir, ancak nesnenin durumunu gerçekten başlatmaz. – derekerdmann
Üzgünüm, sorumu belirsizdi. Problemi sadece parametresiz bir kurucunun nasıl çözüleceğini kastediyorum: Class_Initialize – Dabblernl
Daha sonra, bir nesnenin örneğini oluşturan ve bir Friend Init()
yöntemini arayarak fabrika işlevlerinin bir karışımını (üst sınıflarda) kullanıyorum.
Sınıf CObjects
:
Public Function Add(ByVal Param1 As String, ByVal Param2 As Long) As CObject
Dim Obj As CObject
Set Obj = New CObject
Obj.Init Param1, Param2
Set Add = Obj
End Function
Sınıf CObject
:
Friend Sub Init(ByVal Param1 As String, ByVal Param2 As Long)
If Param1 = "" Then Err.Raise 123, , "Param1 not set"
If Param2 < 0 Or Param2 > 15 Then Err.Raise 124, , "Param2 out of range"
'Init object state here
End Sub
Ben Friend
kapsam projede herhangi bir etkisi olmayacağını biliyorum, ama bu iç için olduğunu bir uyarı görevi görür sadece kullan. Bu nesneler COM üzerinden ortaya çıkarsa, Init
yöntemi çağrılmaz ve sınıfı PublicNotCreatable
stops it being created olarak ayarlar.
- 1. nasıl baş edilir net :: Angular2
- 2. Bir iş parçacığı iptal ettiniz mi?
- 3. Netty SslHandler baş ağrısı
- 4. baş aşağı ayarlanır
- 5. Bahar 3,0 BAŞ
- 6. Bağlantılı listede baş düğüm
- 7. çalışma zamanındaki istisna durumlarını kontrol ettiniz mi?
- 8. Android & RoboGuice - Fragmentin görüşlerini mi enjekte ettiniz?
- 9. OpenMP'de veri yarışıyla nasıl baş edebilirim?
- 10. Z3'te özyinelemeyle nasıl baş edilir?
- 11. ServiceWorker içinde Oturum Expiry nasıl baş edilir
- 12. Geri ilk dizenin baş harfleri
- 13. İfade Karışımı'nın C++/CLI projeleri için destek eksikliğiyle başa çıkmak
- 14. Broken Link Checker Başarısız Oldu Baş İstekleri
- 15. jQuery AJAX Baş Komutunda Hata Sonrası Hata
- 16. R: Yükseltilmiş regresyon ağaçları eksik verilerle nasıl baş eder?
- 17. EXIF yönlendirme verilerini onurlandırmayan Android cihazlarla nasıl baş edilir?
- 18. Büyük girdilerin alınmasında emacların durmasıyla nasıl baş edersiniz?
- 19. SET ANSI_NULLS AÇIK veya KAPALI ile nasıl baş edilir?
- 20. Java koleksiyonunu kullanırken boş değerlere nasıl baş edilir sıralama
- 21. Başlat görüntü iPad'de baş aşağı görüntülenir.
- 22. Oracle'da Baş harflerden önce boşluk ekleyin
- 23. Bir css sözde öğesini nasıl edinebilirim: IE8'de Javascript olmadan çalışmayı mı kontrol ettiniz?
- 24. Powershell Uninstall Komut Dosyası - Gerçek bir baş ağrınız var
- 25. Reaktif redüksiyonda getirme hatasıyla baş etmenin en iyi yolu nedir?
- 26. Modernizr'i RequireJS'ye dahil edin ve Modernizr'i baş harflerle belirtin
- 27. Node.js + libmysql-client + pingSync + setInterval = baş ağrısı (true);
- 28. JSON Jackson ile greenDAO nasıl entegre edilir ve birçok ilişki eşleştirmesiyle nasıl baş edilir
- 29. Perl'de zaman matematiği ile baş etmenin en iyi yolu nedir?
- 30. üst ve satır içi eleman Baş birinci html
Kurucular eksikliği IMO demek için iyi bir yol değildir. VB6 * gerçekten de parametresiz yapıcılara sahiptir ('Class_Initialize' yöntemi). Sahip olmadığı şey parametreli kurucular. –
@Mehrdad: nokta alındı! – Dabblernl