Прошел курс. Получил код Dreamspark. Ввожу код на сайте, пишет: Срок действия этого кода проверки уже истек. Проверьте, правильно ли введен код. У вас осталось две попытки. Вы также можете выбрать другой способ проверки или предоставить соответствующие документы, подтверждающие ваш академический статус.
Как активировать код? |
Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 1446 / 158 | Оценка: 4.31 / 4.00 | Длительность: 25:42:00
Тема: Программирование
Специальности: Программист, Архитектор программного обеспечения
Теги:
Лекция 4:
Типы данных C#
Автоматическая упаковка аргумента метода
Процесс упаковки выполняется автоматически при передачи объекта методу в случае, если метод ожидает упакованный объект, а ему в качестве аргумента передается распакованный объект.
using System; namespace Test { // Значимый тип, данные размещаются в стеке struct Point { // Закрытые поля int x, y; // Конструктор public Point(int x, int y) { this.x = x; this.y = y; } // Функция доступа public void Set(int x, int y) { this.x = x; this.y = y; } // Печать public void Show(string message) { Console.WriteLine(message + "x={0}, y={1}", x, y); } } // Класс с функцией Main может иметь экземпляр // Необязательно все функции в этом классе должны быть статическими class EntryPoint { static void Main() { // Настройка консоли Console.Title = "Автоматическая упаковка аргумента метода"; Console.ForegroundColor = ConsoleColor.White; Console.CursorVisible = false; Point valPoint = new Point(5, 10);// Инициализировали и поместили в стек valPoint.Show("Распакованный объект вне метода: "); Program prg = new Program();//!!!!! prg.AutoPackPoint(valPoint);// Создали еще один объект в куче valPoint.Show("Распакованный объект вне метода: "); Console.ReadLine();// Для задержки окна } // Метод ожидает упакованный объект, поэтому // автоматически упаковывает распакованный аргумент void AutoPackPoint(object arg) { // Проверим тип для подстраховки, чтобы не вызвать исключение if (arg is Point) { Point point = (Point)arg;// Распаковываем point.Set(20, 30);// Изменяем point.Show("Распакованный объект внутри метода: "); // Печатаем } else Console.WriteLine("Вы прислали не Point!"); } } }Листинг 4.6. Пример автоматической упаковки аргумента при передаче методу
Ручная распаковка аргумента метода
Если метод ожидает сам значимый объект, то ссылку на объект передавать нельзя и ее нужно вручную распаковать.
using System; namespace Test { // Класс с функцией Main не может иметь экземпляр // Поэтому все функции в этом классе должны быть статическими class EntryPoint { static void Main() { // Настройка консоли Console.Title = "Распаковка аргумента метода вручную"; Console.ForegroundColor = ConsoleColor.White; Console.CursorVisible = false; Point valPoint = new Point(5, 10);// Инициализировали и поместили в стек valPoint.Show("Распакованный объект вне метода: "); object refPoint = valPoint;// Упаковали значимый объект ManualUnPackPoint((Point)refPoint);// Распаковываем вручную Console.ReadLine();// Для задержки окна } // Метод ожидает распакованный объект, распаковка // должна выполняться вручную для контроля типов static void ManualUnPackPoint(Point arg) { arg.Set(20, 30);// Изменяем распакованную копию arg.Show("Копия объекта внутри метода: "); // Печатаем } } } namespace Test { // Значимый тип, данные размещаются в стеке struct Point { // Закрытые поля int x, y; // Конструктор public Point(int x, int y) { this.x = x; this.y = y; } // Функция доступа public void Set(int x, int y) { this.x = x; this.y = y; } // Печать public void Show(string message) { Console.WriteLine(message + "x={0}, y={1}", x, y); } } }Листинг 4.7. Распаковка аргумента метода вручную