Справочник от Автор24
Поделись лекцией за скидку на Автор24

Методы

  • 👀 285 просмотров
  • 📌 271 загрузка
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Методы» pdf
МЕТОДЫ Основные понятия Метод – это функциональный элемент класса, который реализует вычисления или другие действия, выполняемые классом или его экземпляром (объектом). Метод представляет собой законченный фрагмент кода, к которому можно обратиться по имени. Он описывается один раз, а вызываться может многократно. Совокупность методов класса определяет, что конкретно может делать класс. Например, стандартный класс Math содержит методы, которые позволяют вычислять значения математических функций. Синтаксис объявления метода: [атрибуты] [спецификторы] тип_результата имя_метода ([список_формальных_параметров]) { тело_метода; return значение; } где: 1) атрибуты и спецификторы являются необязательными элементами в описании метода. На данном этапе атрибуты нами использоваться не будут, а из всех спецификаторов мы в обязательном порядке будем использовать спецификатор static, который позволяет обращаться к методу класса без создания экземпляра класса. Остальные спецификаторы мы рассмотрим в следующем модуле. 2) тип_результата определяет тип значения, возвращаемого методом. Это может быть любой тип, включая типы классов, создаваемые программистом, а также тип void, который говорит о том, что метод ничего не возвращает. 3) имя_метода будет использоваться для обращения к нему из других мест программы и должно быть корректно заданным с учетом требований, накладываемых на идентификаторы в С#. 4) список_формальных_параметров представляет собой последовательность пар, состоящих из типа данных и идентификатора, разделенных запятыми. Формальные параметры – это переменные, которые получают значения, передаваемые методу при вызове. Если метод не имеет параметров, то список_параметров остается пустым. 5) return – это оператор безусловного перехода, который завершает работу метода и возвращает значение, стоящие после оператора return, в точку его вызова. Тип значения должен соответствовать типу результата, или приводиться к нему. Если метод не должен возвращать никакого значения, то указывается тип void, и в этом случае оператор return либо отсутствует, либо указывается без возвращаемого значения. Рассмотрим простейший пример метода: class Program { static void Func() //дополнительный метод { Console.Write("x= "); double x=double.Parse(Console.ReadLine()); double y = x*x; Console.WriteLine("y({0})={1}", x, y ); } static void Main() //точка входа в программу { Func(); //первый вызов метода Func Func(); //второй вызов метода Func } } В данном примере в метод Func не передаются никакие значения, поэтому список параметров пуст. Кроме того, метод ничего не возвращает, поэтому тип возвращаемого значения void, и в теле метода отсутствует оператор return. В основном методе Main мы вызвали метод Func два раза. При необходимости данный метод можно будет вызвать столько раз, сколько потребуется для решения задачи. Изменим исходный пример так, чтобы в него передавалось значение х, а сам метод возвращал значение y. class Program { static double Func( double x) //дополнительный метод { return x*x; //возвращаемое значение } static void Main() //точка входа в программу { Console.Write("a="); double a=double.Parse(Console.ReadLine()); Сonsole.Write("b="); double b=double.Parse(Console.ReadLine()); Сonsole.Write("h="); double h=double.Parse(Console.ReadLine()); for (double x = a; x <= b; x += h) { double y = Func(x); //вызов метода Func Console.WriteLine("y({0:f1})={1:f2}", x, y); } } Задание. Преобразуйте программу так, чтобы метод Func возвращал значение выражения x2+x-1; В данном примере метод Func содержит параметр х типа double. Для того, чтобы метод Func возвращал в вызывающий его метод Main значение выражения x*x (типа double), перед именем метода указывается тип возвращаемого значения – double, а в теле метода используется оператор передачи управления – return. Оператор return завершает выполнение метода и передает управление в точку его вызова. Рассмотрим другой пример: class Program { static int Func( int x, int y) // 1 { return (x>y)? x:y; } static void Main() { Console.Write("a="); int a = int.Parse(Console.ReadLine()); Console.Write("b="); int b = int.Parse(Console.ReadLine()); Console.Write("c="); int c = int.Parse(Console.ReadLine()); int max = Func(Func(a, b), c); //2 - вызовы метода Func Console.WriteLine("max({0}, {1}, {2})={3}", a, b, c, max); } } На этапе описания метода (строка 1) указывается, что метод Func имеет два целочисленных формальных параметра – x, y. На этапе вызова (строка 2) в метод передаются фактические параметры, которые по количеству и по типу совпадают с формальными параметрами. Если количество фактических и формальных параметров будет различным, то компилятор выдаст соответствующее сообщение об ошибке. Если параметры будут отличаться типами, то компилятор попытается выполнить неявное преобразование типов. Если неявное преобразование невозможно, то также будет сгенерирована ошибка. Обратите внимание на то, что при вызове метода Func использовалось вложение одного вызова в другой. Задание. Преобразуйте программу, не изменяя метод Func, чтобы можно было найти наибольшее значение из четырех чисел: a, b, c, d. Таким образом, параметры используются для обмена информацией между вызывающим и вызываемым методами. В С# предусмотрено четыре типа параметров: параметры-значения, параметры-ссылки, выходные параметры и параметры, позволяющие создавать методы с переменным количеством аргументов. При передаче параметра по значению метод получает копии параметров, и операторы метода работают с этими копиями. Доступа к исходным значениям параметров у метода нет, а, следовательно, нет и возможности их изменить. Все примеры, рассмотренные ранее, использовали передачу данных по значению. Рассмотрим небольшой пример: class Program { static void Func(int x) { x += 10;// изменили значение параметра Console.WriteLine("In Func: " + x); } static void Main() { int a=10; Console.WriteLine("In Main: {0}", a); Func(a); Console.WriteLine("In Main: {0}", a); } } Результат работы программы: В данном примере значение формального параметра х было изменено в методе Func, но эти изменения не отразились на фактическом параметре а метода Main. Замечание. Передача параметров по значению позволяет гарантировать целостность исходных параметров только в случае, если исходные параметры имеют тип, являющийся размерным типом (value-type). Если исходный параметр имеет ссылочный тип (reference type), то в метод копируется ссылка на объект и, следовательно, можно менять значения объектов. При передаче параметров по ссылке метод получает копии адресов параметров, что позволяет осуществлять доступ к ячейкам памяти по этим адресам и изменять исходные значения параметров. Для того чтобы параметр передавался по ссылке, необходимо при описании метода перед формальным параметром и при вызове метода перед соответствующим фактическим параметром поставить спецификатор ref. class Program { static void Func(int x, ref int y) { x += 10; y += 10; //изменение параметров Console.WriteLine("In Func: {0}, {1}", x, y); } static void Main() { int a=10, b=10; // 1 Console.WriteLine("In Main: {0}, {1}", a, b); Func(a, ref b); Console.WriteLine("In Main: {0}, {1}", a, b); } } Результат работы программы: В данном примере в методе Func были изменены значения формальных параметров х и y. Эти изменения не отразились на фактическом параметре а, т.к. он передавался по значению, но значение b было изменено, т.к. он передавался по ссылке. Передача параметра по ссылке требует, чтобы аргумент был инициализирован до вызова метода (см. строку 1). Итак, при использовании неинициализированных фактических параметров компилятор выдаст сообщение об ошибке. Однако не всегда имеет смысл инициализировать параметр до вызова метода, например, если метод считывает значение этого параметра с клавиатуры, или из файла. В этом случае параметр следует передавать как выходной, используя спецификатор out. class Program { static void Func(int x, out int y) { x += 10; y = x; // определение значения выходного параметра Console.WriteLine("In Func: {0}, {1}", x, y); } static void Main() { int a=10, b; Console.WriteLine("In Main: {0}", a); Func(a, out b); Console.WriteLine("In Main: {0}, {1}", a, b); } } y Результат работы программы: В данном примере в методе Func формальный параметр y и соответствующий ему фактический параметр b метода Main были помечены спецификатором out. Поэтому значение b до вызова метода Func можно было не определять, но изменение параметра повлекло за собой изменение значения параметра b.
«Методы» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач

Тебе могут подойти лекции

Смотреть все 462 лекции
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot