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.
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