Pregunta común, pero podría utilizar un «inglés» explicación..

Ist como Java, donde

Cat myCat

realidad es un puntero a un Gato?

Debo realmente crear copia de constructores en c#?


Entiendo que estamos de paso por valor, pero ahora mi pregunta es que estamos pasando por valor de puntero o copia completa del objeto?

si es el último, no es que demasiado caro rendimiento/memoria sabio? Es que cuando usted tiene que utilizar la palabra clave ref?

OriginalEl autor masfenix | 2009-01-12

4 Comentarios

  1. 46

    Como @rstevens respondió, si se trata de una clase, myCat es una referencia. Pero si pasa myCat una llamada al método, entonces la referencia a sí mismo se pasa por valor – es decir, el parámetro de la misma se hará referencia al mismo objeto, pero es una referencia completamente nueva, así que si usted asignar null, o crear un objeto nuevo, el viejo myCat de referencia seguirá apuntando al objeto original.

    SomeMethod(myCat);
    
    void SomeMethod(Cat cat)
    {
        cat.Miau(); //will make the original myCat object to miau
        cat = null; //only cat is set to null, myCat still points to the original object
    }

    Jon Skeet tiene una buena artículo sobre ella.

    OriginalEl autor Sunny Milenov

  2. 12

    Recuerde que un puntero no es exactamente el mismo como referencia, pero sólo puede pensar de esa manera, si quieres.

    Juro que vi a otro de MODO que la pregunta sobre esto no hace 10 minutos, pero no puedo encontrar el enlace ahora. En la otra pregunta que me vio, estaban hablando pasar argumentos por ref vs por su valor, y que vino a este:

    Por defecto .Neta, no pasar objetos por referencia. Pasar las referencias a los objetos de valor.

    La diferencia es sutil pero importante, sobre todo si, por ejemplo, que desea asignar a su objeto pasado en el método.

    Usted debe comenzar a esa cita con Por defecto, en .Net …
    debidamente observado y aplicado.

    OriginalEl autor Joel Coehoorn

  3. 3

    Si delacred Gato como

    class Cat {...}

    entonces es.

    Si delcared Gato como

    struct Cat {...}

    a continuación, la variable «es» la estructura misma.

    Esta es la diferencia entre los tipos de referencia y de los tipos de valor .Net.

    OriginalEl autor mmmmmmmm

  4. 0

    Sí, se trata de punteros, pero no realmente… lo que lío me original es que no es realmente acerca de acerca de la protección de la variable a partir de los cambios en el método. Si cambia el objeto dentro del método, los cambios son visibles en el exterior de los métodos, independientemente de si se pasa en «ref» o no.

    La diferencia (como yo lo entiendo) es si la variable de enviar tiene su referencia actualizada regreso si cambias el objeto de que las referencias a variables. Así que, dado que este método

    public void DoSomething(ref CoolShades glasses)
    {
        glasses.Vendor = "Ray Ban";
        glasses = new CoolShades();
    }

    la variable que se pasa como un parámetro contiene ahora una referencia a la nueva CoolShades en lugar de cualquier objeto que se hace referencia antes. El parámetro original del objeto Proveedor de los bienes será cambiado a «Ray Ban», independientemente de si se pasa el parámetro ref o no.

    Te importaría si puedo editar el código para un ejemplo más completo?

    OriginalEl autor Jacob Proffitt

Dejar respuesta

Please enter your comment!
Please enter your name here