Bu soruya cevap verebilecek insanlar olduğunu düşünüyorum, bu meraktan bir sorudur:Gerçekten önemli olandan çok daha fazla trivia: Neden Activator.CreateInstance <T>() üzerinde yeni() kısıtlaması yok?
.NET v2'de tanıtılan System.Activator
'dan alınan jenerik CreateInstance
yöntemi, genel argüman üzerinde hiçbir tür kısıtlamaya sahip değildir ancak Etkinleştirilmiş türde varsayılan kurucu, aksi takdirde bir MissingMethodException
atılır. Bana göre, bu yöntemin
Activator.CreateInstance<T>() where T : new() {
...
}
gibi bir tür kısıtlaması olması gerektiği açıktır. Sadece bir ihmal mi yoksa burada gizlenen bir anektod mu?
Belirtildiği gibi, derleyici
private T Create<T>() where T : struct, new()
error CS0451: The 'new()' constraint cannot be used with the 'struct' constraint
yazmanıza izin vermez Ancak, bkz. struct (yeni) belirten jenerik bir yönteme type argümanı olarak bir struct kullanılabilir.) kısıtlama. Bu durumda verilen cevap, yöntemin sınırlandırılmaması için tek geçerli neden gibi görünüyor ...
Bunu incelediğiniz için teşekkürler!
+1 Çok ilginç bir soru. Orada olmamasının nedenini düşünemiyorum, bu yüzden nedenini de merak ediyorum! –
Güncellemeniz hakkında, çünkü gereksizdir; tüm değer türlerinin varsayılan değerlerini varsayılanlara atanan varsayılan bir kurucu vardır (varsayılan (T) 'yi çağırdığınızda aldığınız şey budur. –
Tüm yapıların C# varsayılan değerlerini içerir. – Linkgoron