именение параметров методов
От: -rsdn- Беларусь http://dsalodki.wix.com/resume
Дата: 13.12.13 15:28
Оценка:
поясните вывод программы
class MyClass
    {
        public string str;
    }
    class Program
    {
        public static void Go(object o)
        {
            o = "1";
        }        public static void Go(MyClass c)
        {
            c.str = "after";
        }
        static void Main(string[] args)
        {
            object o = "0";
            Console.WriteLine(o);
            Go(o);
            Console.WriteLine(o);
            MyClass c = new MyClass();
            c.str = "before";
            Console.WriteLine(c.str);
            Go(c);
            Console.WriteLine(c.str);
        }
    }

я не понимаю почему оба параметра ссылки, они меняются в методе, но в первом случае происходит копирование, а во втором поверхностное копирование?
Re: именение параметров методов
От: samius Япония http://sams-tricks.blogspot.com
Дата: 13.12.13 18:00
Оценка:
Здравствуйте, -rsdn-, Вы писали:

R>я не понимаю почему оба параметра ссылки, они меняются в методе, но в первом случае происходит копирование, а во втором поверхностное копирование?

В обоих случаях происходит копирование ссылки при вызове метода. Только в теле первого метода вы подменяете объект, на который ссылается ссылка. Т.е. присваиваете этой ссылке (точнее ее копии) новый объект. Во втором методе вы присваиваете полю объекта, расположенного по ссылке, не подменяя сам объект.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.