Estaba pensando en esto. las clases son obviamente pasadas por ptr. Sospecho que las estructuras se transmiten copiándolo, pero no estoy seguro. (Parece un desperdicio para una matriz int tener cada elemento como un ptr. y pasar ptrs para los enteros)¿Cómo implementan los structs los genéricos?
Pero al pensarlo, List<MyStruct>
no puedo saber el tamaño de mi estructura. ¿Qué pasa cuando hago esto? ¿Hay varias copias de "List`1" y cada vez que lo uso con un tamaño de almacenamiento no tiene una nueva implementación? (ajustando para las nuevas compensaciones de T y tal).
Eso podría tener sentido ya que la fuente estaría en el CIL dentro de una DLL. Pero estoy adivinando por completo, ¿cómo se hace? ¿Quizás una referencia o número de página a los estándares de ECMA?
Sé poco sobre cómo C# implementa los genéricos. Pero a modo de referencia, así es exactamente cómo funcionan las plantillas C++ (en teoría, se instanciaría una implementación separada de 'List' para cada tipo). –
@Oli: sí, también sé que no compila métodos a menos que lo use y necesita la plantilla en el encabezado. C# no tiene encabezados, pero los genéricos aún funcionan después de haber sido compilados en un dll –
@Oli: Es decir, tendrá implementaciones separadas para cada tipo de valor y una implementación compartida para los tipos de referencia. –