Sanal kurucuların, bazı tasarım desenlerini uygulamak için kullanıldığını, ancak sanal kurucuların herhangi bir ihtiyacını anlamadığını okudum. Peki sanal kurucular nelerdir ve neden onlara gerçekten ihtiyacımız var?Sanal yapıcılar nerede kullanılır?
cevap
Çoğu programlama dilinde, afaik, sanal kurucuları bulamıyorsunuz. Bir nesnenin oluşturulmasından sonra çalışma zamanında sanal üyelerin hangi geçersiz kılmalarının değerlendirildiği, ancak çoğu dilde örneğini oluştururken gerçek sınıfı bilmeniz gerekir. Bu nedenle sanal kurucular bu dillerde hiçbir anlam ifade etmemektedir.
.NET'te yansımayla benzer bir çözüm elde edebilirsiniz, yani oluşturmak istediğiniz nesneyi temsil eden Type sınıfının bir örneğiyle bir nesne oluşturabilirsiniz. Ve genel destekle, benzer bir şey elde edebilirsiniz, ancak sanal kurucular değil.
Gerçek sanal yapıcılarla çalıştığım tek programlama dili Delphi'dir. Delphi'de, belirli bir "Meta Sınıfı türü" vardır, yani bir metaclassı temsil eden özel bir programlama yapısı vardır (.NET'de, meta sınıfı, Type
sınıfı, sadece normal bir sınıfın bir örneğidir). Eğer TMyClass
adlı bir sınıf var eğer öyleyse - Deplhi adlandırma kuralları;) Şimdi bu
TMyMetaClass : class of TMyClass
gibi metaclass ilan edebilir
TMyClass : Class ...
, sen TMyMetaClass
tipte bir değişken bildirebilirsiniz
MyMetaClassVariable : TMyMetaClass
...
// Assign the meta class to refer to our concrete class
MyMetaClassVariable := TMyClass;
Ve bu değişkeni kullanarak yeni bir örnek oluşturabilirsiniz
MyClassInstance := MyMetaClassVariable.Create();
Şimdi, MyMetaClassVariable
, TMyClass
ya da bunların bir uzmanlığı olan herhangi bir sınıfa başvurabilir. Kurucu sanal olarak bildirilmişse, değişken bu belirli sınıfın bir örneğiyle oluşturulacaktır.
Aynı şekilde, Delphi'de sanal statik yöntemleri bildirebilir ve bunları meta sınıfın bir örneğinden geçirebilirsiniz.
Yani diğer soru? Neden onlara ihtiyacımız var? Peki, Delphi'de, .NET'teki Type
sınıfı ile aynı sorunları çözüyorlar ve tasarım zamanında sınıf adını bilmediğiniz nesneleri oluşturmanıza izin veriyorlar. Örneğin, bir form tasarladığınızda ve bir grup denetime koyduğunuzda, bu verilerin tasarımcı tarafından serileştirilmesi ve seri hale getirilmesi gerekir. Formal serileştirildiğinde, o zaman aslında okunan metatypes ve doğru örnekler (TextBox
, ComboBox
, vb), metatype üzerinde sanal yapıcıyı çağırarak oluşturulur.
- 1. Ruby'de bir angajman yapıcılar
- 2. Yapıcılar kalıtım
- 3. ipython nerede kullanılır ve ipthon kabuğu nerede?
- 4. Java devralma - yapıcılar
- 5. Etkinlikler ve delegeler nerede kullanılır?
- 6. yapıcılar için şablon argüman indirimi
- 7. C# 7 İfadeli Gömülü Yapıcılar
- 8. Kopyalama kurucusu silme, devralınan yapıcılar
- 9. İş modelini modele dönüştürmek için nerede kullanılır?
- 10. Lacin in laravel ile Nerede kullanılır?
- 11. Zend Framework çeviri aracı nerede kullanılır?
- 12. Koleksiyon nerede java web uygulama geliştirme kullanılır?
- 13. SQLMetal, sınıflar oluşturur, ancak parametresiz yapıcılar değil
- 14. Yapıcılar üreten bir JAXB Eklentisi var mı?
- 15. Kotlin'de uzatma yapıcılar oluşturmak mümkün mü?
- 16. Sanal kalıtımda kurucu emri
- 17. ROWLOCK, CTE, Alt sorgu ve Güncelleme ile READPAST nerede kullanılır?
- 18. Aşağıdaki T-SQL sorgusu için usinq linq'indeki tümcesinde nerede kullanılır?
- 19. En iyi uygulamalar bekle-uyumsuzluğu, görevi başlatmak için nerede kullanılır?
- 20. Sanal Mac?
- 21. sanal işlevi
- 22. nerede?
- 23. nerede
- 24. Nerede
- 25. WCF hizmetinde wsdl dosyası nerede
- 26. Sanal dosyayı Intellij IDEA eklentisi
- 27. Değerlendirmeler, nerede ve nerede Haskell
- 28. Intellij içinde yapıcılar için otomatik dolgu saplama parametreleri
- 29. "... parametresiz yapıcılar ve başlatıcılar destekleniyor ..." hatası ne anlama geliyor?
- 30. Neden tüm statik yapıcılar C# (yani üst sınıflarınkiler) denir?
Delphi sözdizimi doğrudur. –
@Gamecat - teşekkürler, "feragatnamemi" kaldırdım;) Gürültü olarak buna gerek yok. – Pete
Aslında, 'TMyClass = class', yani '=' ve '' 'değil. –