Рассмотрим работу с классами в C# на примере
⇐ ПредыдущаяСтр 2 из 2 Сейчас мы рассмотрим пример создания небольшого класса. В нем мы постараемся рассмотреть работу как с созданием новых методов и переменных-членов класса, так и подходы к работе с классом, так как новичкам программирования сначала бывает не понятен смысл применения классов. Создадим новый класс, Назовем его Man (человек). Наш класс будет схематично описывать человека следующим образом:
Создадим новое консольное приложение, и назовем его ClassTesting using System; namespace ClassTesting class Program static void Main(string[] args) } } public class Man // конструктор класса (данная функция вызывается // закрытые члены, которые нельзя именить // строка, содержащая имя // беззнаковое целое число, содержащая возраст // беззнаковое целое число, отражающее уровень здоровья // булево, означающее жив ли данный человек // заготоква функции "говорить" } // заготовка функции "идти" } // функция, возвращающая показатель - жив ли данный человек.
} } Вот такая вот заготовка нашей программы. Как видите мы добавили еще одну функцию, о которой забыли в схеме нашего класса IsAlive. Теперь более тщательно займемся реализавцией наших классов. Хорошее знание языков программирования никогда не обходится без знания того, как выполняется генерация случайных чисел. Сейчас мы рассмотрим то, как выполняется генерация случайного числа в С#. Random rnd = new Random(); Теперь для того, чтобы получить случайное число достаточно использовать созданный экземпляр класса, вызвая метод Next ();, например Age = rnd. Next (); При желании (а нам этого очень хочется), можно генерировать число в заданном диапазоне, указав начальное и конечное значение. // конструктор класса (данная функция вызывается public Man(string _name) // получаем имя человека из входного праметра // генерируем возраст от 15 до 50 } (uint) перед экземпляром класса rnd означает, что значение случайного числа, которое вернет функия Next будет приведено к типу uint (unsigned – т.е. беззнаковое int). Просто функция rnd возвращает значение с типом int, и данное значение не может быть неявно преобразовано, поэтому необходимо сообщить компилятору о пребразовании.
// экземпляр класса Random private Random rnd = new Random();
Начало кода фукции будит таким
// объявляем переменную, в которой мы будем хранить string tmp_str = ""; Как видите здесь мы объявляем переменную random_talk, и сразу при объявлении она получает значение – результат выполнения функции rnd. Next, в диапазоне от 1 до 3.
case 1: // если 1 - называем свое имя // генериуем текст сообщения
} case 2: // возраст // генериуем текст сообщения } case 3: // говорим о своем здоровье // в зависимости от параметра здоровья
// завершаем оператор выбора } Как видно из кода, в зависимости от значения переменной random_talk выполняется ветвление кода, и выбирается одна из веток для значения random_talk = 1 (case 1), random_talk = 2 (case 2), или random_talk = 3 (case 3). // выводим в консоль сгенерированное сообщение } Теперь рассмотрим код функции Go. Здесь все проще: сначала мы определяем жив ли объект, если нет – то мы сгенерируем строку, с сообщением о том, что данный человек умер и не может идти.
// если объект жив // если показатель более 40 // генерируем строку текста } // генерируем строку текста } } // генерируем строку текста } }
public void Kill() // устанавливаем значение isLife (жив) } Вот в принципе и все. Если вы набрали весь код верно, то при компиляции (клавиша F5) не должно возникнуть никаких проблем. Нам необходимо сделать так, чтобы консоль ожидала команды пользователя: в зависимости от этих команд будут выполняться различные действия – создания новых экземпляров класса Man (так сказать создание новых людей :-)), и выполнение функций, которые реализованы в классе Man Для этого мы создадим бесконечный цикл: в нем программа будет запрашивать пользователя ввести строку. Затем строка будет сверяться с заданным набором команд при помощи оператора выбора (switch). Первым делом объявим переменную user_command в которой мы будем хранить команду, введенную пользователем, далее мы объявим переменную Infinity. До тех пор пока значение Infinity будит равно true, цикл будет выполняться. Изменеие этой переменной произойдет, только если пользователь введет команду exit
// переменная, которая будет хранить команду пользователя // бесконечный цикл while (Infinity) // пока Infinity равно true // получение строки (команды) от пользователя Далее, из кода видно, что мы начинаем наш цикл while
Infinity = false; } // если user_command содержит строку help System.Console.WriteLine("Список команд:"); System.Console.WriteLine("create_man: команда создает человека, (экземпляр класса Man)"); System.Console.WriteLine("---"); break; } // если команду определить не удалось System.Console.WriteLine("Ваша команда не определена, пожалуйста повторите снова"); } } Не забульте закрыть все фигурные скобки (}) после операции ветвления. Теперь нам осталось лишь реализовать обработку команд create_man, kill_man, talk и go. // пустой (раный null) экземпляр класса Man Теперь рассмотрим код обработки команды crete_man в теле оператора ветвления (switch) case "create_man": // проверяем, создан ли уже какой либо человек // человек уже существует.
SomeMan.Kill(); } // просим ввести имя человека // получаем строку введенную пользователем // создаем новый объект в памяти, в качесвте параметра // сообщаем о создании break; } Как видно из кода, с помощью оператора new, мы создаем новый объект в памяти.
// проверяем, что объект существует в памяти
}
(!!!) Обратите внимание на то, что перед тем как воспользоваться вызовом какого-либо метода, реализованного в нашем классе, вы должны быть уверены, что объект, через который мы вызываем метод - объвлен в памяти. Мы делаем это, проверяя, не равен ли наш объект (к примеру SomeMan) null. Если не выполнить такую провеку, а потом в ходе работы программы окажется что, к примеру, SomeMan = null и мы попытаемся вызвать лубой из его методов (кроме конструктора класса – он как раз и создает объект в памяти), то в программе произайдет ошибка и обработка исключения. Собственно, нам остались команды talk и go case "talk": // проверяем, что объект существует в памяти // вызываем фукнцию разговора } System.Console.WriteLine("Человек не создан. Команда не может быть выполнена"); } break; } case "go": // проверяем, что объект существует в памяти break; } Пример работы откомпелированной программы
ХОД РАБОТЫ 1) В течении двух пар выполнить примеры из теоретического курса; 2) За 20 минут до окончания защитить лабораторную работу, ответить на вопросы преподавателя; 3) К следующему занятию на следующей недели выполнить индивидуальное задание*; 4) Защитить ответив на вопросы по индивидуальному заданию и выполнив мелкие доработки по требованию преподавателя; 5) Оформить отчет и сдать преподавателю.
* - на зеленой неделе, под защиту индивидуального занятие будет отведено одно занятие.
ВАРИАНТЫ ИНДИВИДУАЛЬНЫХ ЗАДАНИЙ Необходимо спроектировать и реализовать класс согласно заданию (с внутренними свойствами, минимум 5-ть (не ограничивайтесь минимум) свойств, в качестве примера 1, 11, 21, 31 индивидуальное задание) и консольную программу с интерфейсом манипулирования списком объектов (добавление, редактирование внутренних полей, удалением и просмотром всех добавленных). Также предусмотреть загрузку\выгрузку из(в) файл. Варианты: 1) Танк (класс, название, калибр пушки, количество человек экипажа, толщина брони и минимум 5 свойств); 2) Корабль; 3) Самолет; 4) Автомобиль; 5) Мотоцикл; 6) Велосипед; Стационарный телефон 8) Смартфон; 9) Ноутбук; 10) Навигатор; 11) Кошка (порода, кличка, вес, цвет шерсти, любимое лакомство и т.д.); 12) Собака; 13) Хомяк; 14) Попугай; 15) Лошадь; 16) Корова; 17) Свинья; 18) Курица; 19) Гусь; 20) Кролик; 21) Школа (номер, адрес, количество учителей, количество школьников, суммарная площадь и т.д.); 22) Гастроном; 23) Супермаркет; 24) Обувной магазин; 25) Часовая мастерская; 26) Ремонт электротехники; 27) Мебельный; 28) Военная часть; 29) Спортзал; 30) Бассейн; 31) Погода на день (день, температура воздуха днем, температура воздуха ночью, скорость ветра, облачность, осадки и т.д.); 32) Праздник; 33) Соревнование; 34) Игра; Путешествие.
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|