Первый, самый простой вопрос на собеседовании разработчика на C#. Как обычно, конечно, типа с подвохом, и конечно из 2-х частей.

Первая часть вопроса:

Что выведет в консоль этот код?

				
					        class Number
        {
            public int Value;
            public Number(int val)
            {
                Value = val;
            }
        }
        static void Main(string[] args)
        {
            Number n1 = new Number(1);
            Number n2 = n1;
            n1.Value = 2;

            Console.WriteLine(n2.Value);
        }
				
			

Ха ха ха, подумал я и легко справился, ответ будет 2, так как я помню же, что классы это ссылочные типы и когда мы пишем n2 = n1 это мы присваиваем ссылку.

Вторая часть:

Как изменить код вне метода Main, что бы в консоль вывелось 1?

И тут я не тоже оплошал, после некоторых раздумий, вспомнил, что если ключевое слово class поменять на struct, то особо ничего не изменится, кроме того, что Number перестанет быть ссылочным типом, так как struct это уже тип Значение (value type).

Поэтому этот код уже выведет в консоль 1

				
					        struct Number
        {
            public int Value;
            public Number(int val)
            {
                Value = val;
            }
        }
        static void Main(string[] args)
        {
            Number n1 = new Number(1);
            Number n2 = n1;
            n1.Value = 2;

            Console.WriteLine(n2.Value);
        }

				
			

Но неожиданно у этого вопроса оказалась еще и третья чать:

Как отличаются class и struct в плане расположения в памяти?

На этом месте я, к сожалению, поплыл, начал косить под теоретика, типа я не разбираюсь в железках, к коим типа относится память компьютера, и это была раковая ошибка. Интервьюеры ждали совсем другого ответа хотя он, этот ответ, абсолютно, элементарно простой.

Не надо боятся отвечать на такие вопросы, просто вспомни два слова STACK (стэк) и HEAP (куча). В стэке программа хранит переменные значимых типов, вызовы функций и ссылки ссылочных типов, а в куче хранятся все данные тех самых ссылочных типов, адреса которых хранятся в стэке в виде ссылки.

Понятия СТЭК и КУЧА не относятся к разряду железа, это абстракция, которая должна быть понятна программисту, особенно тем, кто уже видел ошибку STACK OVERFLOW.

Ссылочный тип – вопросы с собеседования
Tagged on:             

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.