size Method
tanımını değiştirirseniz Boksu önleyebilirsiniz:
void Method<T>(T i) where T : I
{
}
zamanında CLR jenerik argüman (lar) türüne göre genel yöntemler uzmanlaşmış çünkü bu, boks önler. Referans türlerinin hepsi aynı uygulamayı paylaşabilirken, yapı türleri her birinin kendi versiyonunu alır. Bu, T
numaralı Method
'daki tüm işlemlerin, beton yapı türünün boyutunu dikkate alacağı anlamına gelir.
sanal yöntem sevk beri kutulu edilecek i
neden olacaktır Equals
veya GetHashCode
gibi System.Object
tanımlanan sanal yöntemleri çağırmadan beri Ancak dikkatli olmalı JIT bazı statik sevk yapmak mümkün olabilir rağmen (bir yöntem tablo işaretçisi gerektirir
durumlar). Bununla birlikte, yapınızın türü, söz konusu sanal yöntemi/yöntemleri geçersiz kılarsa, yapmanın (ve dolayısıyla üyelerinin) mühürlendiğinden, çağrılacak yöntem tekrar statik olarak bilindiğinden, kutunun yapılması gerekmeyecektir. Genellikle
doğrudan IEquatable<T>
uygulamak için ayrıca T
kısıtlayıcı ve örneğin karşılaştırmalar için bir IEqualityComparer<T>
kullanarak Equals
veya GetHashCode
arayarak önleyebilirsiniz
void Method<T>(T i) where T : I, IEquatable<T>
{
T other = ...
if(i.Equals(other)) //avoids boxing
{
}
}
... ben neden bu işleri tek –