Si escribo (o uso) una clase genérica, p. Enumerar, y parametrizarlo con dos tipos enumerados diferentes, ¿obtendré dos copias del código JITted? Dado los siguientes artículos que analizan cómo el JITter genera una copia para los tipos de referencia, y una copia para cada tipo de valor, creo que esto se reduce a, "¿Cada enum específica se considera un tipo de valor diferente con el propósito de JITting?"¿El compilador .NET JIT genera código diferente para parámetros genéricos con diferentes enumeraciones?
http://msdn.microsoft.com/en-us/library/ms379564%28v=vs.80%29.aspx#csharp_generics_topic1
En código 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?
}
}
}
Estoy interesado en saber esto en general, sino también específicamente para .NET CF 3.5 (Windows CE) compilador JIT (EDITAR: porque estoy interesado en posibles implicaciones de hinchamiento de código). ¿Alguna sugerencia sobre la mejor manera de descubrir esto? Estaba pensando en escribir una función en la clase C que P/invoca al código nativo, donde puedo acceder al depurador y examinar la pila de llamadas, específicamente la dirección de retorno, pero tal vez alguien puede responder con autoridad en función de las reglas de lenguaje de las que ' m no es consciente ...
Supongo que solo hay una instanciación por tipo integral subyacente, pero me encantaría escuchar una respuesta autorizada. –
Sí. ¿Qué etiquetas deberíamos agregar para atraer la atención de Eric Lippert? –
'fabulous-adventures-in-coding', creo que –