Tamam Bazı girişler arıyorum, şu anda .NET 3.5'de desteklenmediğinden eminim ama işte geliyor.C# Genel Bağlantı Kısıtlamaları Kısıtlamaları Çevresi Nasıl Çalışır?
Böyle bir yapıcı olması benim sınıfa geçti genel bir tür gerektiren istiyorum:
new(IDictionary<string,object>)
yüzden sınıf bu
public MyClass<T> where T : new(IDictionary<string,object>)
{
T CreateObject(IDictionary<string,object> values)
{
return new T(values);
}
}
gibi görünecektir Ama derleyici desteklemiyor Bu, ne sorduğumu gerçekten bilmez.
Bazılarınız bunu sorabilir, neden bunu yapmak istiyorsunuz? Peki bir ORM'nin bir evcil hayvan projesinde çalışıyorum, böylece DB'den değerler alıyorum ve sonra nesneyi oluşturup değerleri yüklüyorum.
Nesnenin verdiğim değerlerle kendini yaratmasına izin vermenin daha temiz olacağını düşündüm. İki seçeneğim olduğunu söyleyebilirim:
1) PropertyInfo [] dizisini almak için yansımayı (kaçınmaya çalıştığım) kullanın ve ardından değerleri yüklemek için bunu kullanın.
2) çok gibi bir arabirim desteklemek için T gerektirir:
ortak arabirim ILoadValues { void LoadValues (IDictionary değerleri); }
ve sonra ben felsefi olduğunu tahmin arayüzü ile sahip bu
public MyClass<T> where T:new(),ILoadValues
{
T CreateObject(IDictionary<string,object> values)
{
T obj = new T();
obj.LoadValues(values);
return obj;
}
}
sorunu yapmak, gerçekten insanlar değerleri yüklemek için genel bir yöntem ortaya çıkarmak istemeyiz. yapıcısı kullanarak Fikir MyClass<T>
aynı mecliste olduğu gibi sürece bu
namespace DataSource.Data
{
public class User
{
protected internal User(IDictionary<string,object> values)
{
//Initialize
}
}
}
gibi bir nesne olsaydı yapıcı mevcut olacağıydı. Ben şahsen benim düşünceme Tip kısıtlama sormak gerekir (Ben bu kurucu erişim var mı? Yapmak, harika!)
Herhangi bir girdi hoş geldiniz.
Sizi yanıt olarak ayarladım çünkü açık bir şekilde bildirerek bir arabirim uygulamasını gizleyebildiğinizi asla bilemedim. Ya da en azından yazana kadar tıklamadı. Teşekkürler! – Jose