UserControl'ın. Bu sorunun bir çözümü var mı?C# jenerik aşağıdaki kontrolünü tanımlamak istiyorum
cevap
Bu
public class Control1<T> : UserControl { ... } public class Control2 : Control1<double> { ... } public class Control3 : Control2 { ... }
çalışır buradan okumuştu: Bunu çalıştığımızda
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/0c265543-d6f0-41f6-beeb-b89e0071c5c3
+1 Pratikte önerdiğim gibi aynı çözüm, ancak daha temiz bir şekilde tarif edildi. –
evet işe yarıyor ve aradığım şey buydu. – Toto
Control3'ün ayrı bir dosyada bulunduğundan emin olun. –
kontrol veya tasarımcı kullanabilmek için için yapamayacağı konularla ilgili bazı kısıtlamalar vardır. Temel olarak hepsi, tasarımcıyı sınıfınızı oluşturabilmenin etrafında döner (parametresiz bir kurucu olmalı, abstract
, vb olamaz). Tasarımcı ne tür bir genel argüman olarak geçeceğine dair bir fikre sahip olmadığı için (ve bunun bir düşünceden ibaret olduğunu sanmıyorum), sınıfınız örneklenemez.
En iyi umudu, UserControl
'nu oluşturmak ve kurucuyu protected
olarak değiştirmek olacaktır (bu, tasarımcının yansıma kullandığı ve görünmezliği göz ardı ettiği için çalışacağına inanıyorum, ancak% 100 pozitif değilim). Daha sonra bu UserControl
'dan devralınabilir ve genel sınıfınızı oluşturabilir ve taban (protected
) yapıcısını çağırabilirsiniz. Tasarımcı senin sınıfının bir örneğini çağırır çünkü bu inanmıyorum
mümkündür. Jenerik kullanıyorsanız, tasarımcı 'T' ye hangi türden geçeceğini bilmez.
Projemizde yaptığımıza çok benziyor.
jenerik olan bir temel sınıf vardır:
public class controlMessagesNonGenericParent : controlItemList<MailItem, MailItemCollection>
{
}
:
public partial class controlItemList<TBaseItem, TBaseItemCollection> : UserControl, IUIDispatcher
where TBaseItem : new()
where TBaseItemCollection : IItemCollection<TBaseItem>
Daha sonra her kullanım için biz (hala tasarımcı tarafından kullanılamadı) olmayan bir jenerik sürümü tanımlamak
. .. ve tasarımcı kullanılabilecek o zaman elde var kontrolleri:public partial class controlMessages : controlMessagesNonGenericParent
{
...
}
Görünüşe göre tersi yönde gidiyorsunuz. Genel bir tabana sahipsiniz ve tasarımcı için belirli somut uygulamalar yaratıyorsunuz. Genel bir kontrol oluşturmak ve tasarlamak istiyor gibi görünüyor. –
Haklısınız, ancak doğrudan kontrol olarak genel bir sınıf kullanmak imkansızdır. Bu yüzden onu alt sınıf olarak kullanıyoruz, bu yüzden tasarımcıda kullanılabilir. Alt sınıflanmış sürümlerin davranışı değiştirmesi gerçeği bu konuyla ilgisizdir. –
Doğru, bu imkansız, ancak problemini çözmek için görünmüyor.Bu, onun problemi çözmesine izin verecek bir "hack" değil. Gerçekten de, çözümün DİĞER yöne doğru gittiği anlaşılıyor (ISN'T jenerik, tasarımı yap, sonra altsınıfı yap ve bunu jenerik yapan bir kontrol yarat.) Daha mantıklı. Bunun bir şeyi nasıl çözdüğünü anlamıyorum. –
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=105876
hata microsoft'un siteye gönderilen edildi ve ücreti "Ertelendi" olarak işaretlenmiş anda çözüm yok onun görebiliriz !! .
Gerçekten bir "hata" gibi görünmüyor, bu jenerik kullanmanın bir sonucudur. Belki de, tedarik edilecek bir türü seçmenize izin veren gelecekteki bir geliştirme sağlayabilirler, ancak bunu bir "hata" olarak sınıflandırmayacağım. –
Jenerikler yerine kompozisyon kullanın. ObjectSelectorControl kullanmak yerine, jenerik olmaya zorlamak yerine başka bir tür (Selector<T>
belki) genel bir üye verin ve bu nesne üzerinde harekete geçin.
Belki hatalıyım, ancak UserControl'unuzda kompozisyon kullanıyorsanız: a) Genel nitelik tipini belirtmeniz gerekir veya b) size sınıf jenerik yapmalısınız, böylece ne demek istediğimi anlamadım. –
Kompozisyon, jenerikler için bir yedek teknik değildir. Belki de WinForms'u jeneriklerle birlikte çalıştırabilmek için bir çözüm üretilebilir, ancak bu durumda cevabınız herhangi bir yön göstermez. – MarioDS
- 1. aşağıdaki ile bir combobox doldurmak istiyorum C#
- 2. C# jenerik fonksiyon uygulaması C
- 3. aşağıdaki satırı çalışıyor jenerik otomatik tamamlama işlevi
- 4. C# Jenerik Linq sorgu
- 5. Garip C# jenerik contraint
- 6. nasıl Aşağıdaki kod var Java Jenerik
- 7. Jenerik F # arayüzlerle C# birinde
- 8. Sınırlı jenerik tür parametresini C#
- 9. örneğini Jenerik C Tipi # sınıfında C#
- 10. benim Build.xml karınca komut küresel svnSetting tanımlamak istiyorum küresel
- 11. mockito Testten istiyorum ben kod aşağıdaki adres
- 12. aşağıdaki sorgu eşdeğer oluşturmak istiyorum nasıl elasticsearch
- 13. C++ 'da sabit bir C-string tanımlamak için doğru yolu?
- 14. Angular2: Form Patch kontrolünü "patchValue()"
- 15. Neden vektörü tanımlamak için c() kullanılır?
- 16. jenerik
- 17. VB.NET jenerik
- 18. ben aşağıdaki biçimde bir if deyimi yazmak istiyorum Ar
- 19. Türü döndürmeden jenerik döndürme
- 20. Java Ben aşağıdaki sınıf yapısına sahip Jenerik yöntemle
- 21. Jenerik Aşağıdaki küçük kod neden çalışmıyor merak ediyorum
- 22. Java'da sınıftaki çift jenerik kısıtlaması: ConcreteClass & I
- 23. C++ Böyle diziler oluşturmak istiyorum
- 24. C i aşağıdaki sınıfları
- 25. : Aşağıdaki kodu kullanarak C++
- 26. Jenerik Jenerik: uzanır "belirteci üzerinde sözdizimi hatası '', beklenen"
- 27. jenerik tip
- 28. Kapatmada jenerik tip döndüren dinamik jenerik parametreler?
- 29. Jenerik doğru
- 30. yay bağlamında bir dizi tanımlamak
, nasıl xaml üzerinde sınıf bildirmek mi? –