Quiero ver el código del método array.Clone() de C#

Iniciado por DanteInfernum, 25 Agosto 2013, 23:54 PM

0 Miembros y 3 Visitantes están viendo este tema.

DanteInfernum

Me interesaría estudiar qué es lo que realmente hace el método Clone, paso a paso. Para esto, he estado intentando verlo a través de Reflector.

Lo que obtengo es lo siguiente:

public object Clone()
{
    return base.MemberwiseClone();
}


Veo que este método invoca a otro, o sea, a MemberwiseClone().
Lo busco:

[MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]
protected extern object MemberwiseClone();


Y acá directamente ya no entiendo más nada...
¿Por qué no veo el método expresado sentencia a sentencia, de la misma forma que el resto?



Juan.

Hay cosas que no se pueden ver, esta por ejemplo o como se hace un .read/.next

Son demasiado internas y yo creo que no está programado en C#, sino en C o en ensamblador directamente

raul338

El codigo .net pasa a ser transformado a codigo CIL/MSIL y es ahí donde va toda la magia :P capaz las llamadas van ahí

DanteInfernum

Ok, gracias por sus respuestas.
Era nada más por simple curiosidad. Hace poco descubrí el método Clone. Hasta ahora, cuando necesitaba por ejemplo copiar una matriz en otra, lo implementaba yo mismo al método, y me preguntaba si C# haría algo parecido a lo que yo hago.

Juan.

No, el clone de C# y de Java lo que hacen es una copia directa en memoria de los valores, vamos lo que es copiar el contenido de un puntero de toda la vida y seguro que no tiene nada que ver porque imagino que usaras una estructura iterativa como while o for

DanteInfernum

Sí, tengo entendido que lo que hace Clone es crear un nuevo objeto idéntico al que estoy copiando. En cambio, lo que yo hacía era modificar los valores de una matriz ya existente mediante un for.