none
Objetos passado por parâmetro é referencia ou valor RRS feed

  • Pergunta

  • Li alguns materiais, e não consegui entender um conceito

    no código abaixo, passo um objeto por parametro, e quando, dentro do metodo, altero uma propriedade do objeto, ele modifica, mas na verdade nao estou passando uma referencia, e sim, um valor, então como é possivel ele alterar o valor do objeto?

    Se o objeto é uma cópia (um valor) então todas as variaveis dela também deveria ser uma cópia, isso no meu raciocinio, só que não está funcionando dessa forma

    class Program
        {
            public static void alter(Pessoa p)
            {
                p.idade = 99; // porque aqui modifica o valor
                p = new Pessoa("Katte", 100); // porque aqui não?
    //só tem efeito dentro do metodo alter, nao modificando o valor
                p.Display();
    
    // PORQUE MEU DEUS!!??
            }
    
    
            static void Main(string[] args)
            {
                Pessoa p1 = new Pessoa("Jhon", 20);
                p1.Display();
                alter(p1);
                p1.Display();
    
                Console.ReadKey();
                
            }
        }
    
        public class Pessoa
        {
            public string Nome;
            public int idade;
            public Pessoa(string n, int i)
            {
                Nome = n;
                idade = i;
            }
    
            public void Display()
            {
                Console.WriteLine("Nome: {0}, Idade: {1}", Nome , idade);
            }
            
    
    
        }


    • Editado Yuri Schmitz sexta-feira, 15 de março de 2013 16:56
    sexta-feira, 15 de março de 2013 16:50

Todas as Respostas