Jeśli piszę (lub używam) klasę ogólną, np. Wymień i sparametryzuj go dwoma różnymi typami wyliczonymi, czy otrzymam dwie kopie kodu JITted? Biorąc pod uwagę następujące artykuły, które omawiają, w jaki sposób JITter generuje jedną kopię dla typów odniesienia, i jedną kopię dla każdego rodzaju wartości, myślę, że sprowadza się to do "Czy każde konkretne wyliczenie uważa się za inny rodzaj wartości dla celów JITting?"Czy kompilator .NET JIT generuje inny kod dla ogólnej sparametryzowanej z różnymi wyliczeniami?
http://msdn.microsoft.com/en-us/library/ms379564%28v=vs.80%29.aspx#csharp_generics_topic1
W kodu C#:
using System.Collections.Generic;
namespace Z
{
class Program
{
enum A {a}
enum B {b}
class C<T>
{
}
static void Main(string[] args)
{
var x = new C<A>();
var y = new C<B>(); // does this JIT a new C constructor for enum type B?
}
}
}
Jestem zainteresowany tym wiedzieć w ogóle, ale także specjalnie dla .NET CF 3.5 (kompilator JIT) WindowsCE (EDYCJA: ponieważ jestem zainteresowany możliwymi wpływami na kodowanie). Wszelkie sugestie dotyczące najlepszego sposobu, aby to znaleźć? Myślałem o napisaniu funkcji w klasie C, która P/Wywołuje do kodu natywnego, gdzie mogę włamać się do debuggera i zbadać callstack - konkretnie adres zwrotny, ale być może ktoś może odpowiedzieć autorytatywnie na podstawie reguł językowych, których ja ' Nie wiem ...
Domyślam się, że istnieje tylko jedna instancja na podstawowy typ całki, ale chciałbym usłyszeć autorytatywną odpowiedź. –
Tak. Jakie tagi powinniśmy dodać, aby przyciągnąć uwagę Erica Lipperta? –
'Fantastyczne przygody-w-kodowaniu', uważam, że –