C#. Понятие метода. Примеры методов в классах. Возврат из метода. Оператор return. Методы без параметров. Ключевое слово void
Понятие метода. Примеры методов в классах. Возврат из метода. Оператор return . Методы без параметров. Ключевое слово void
Содержание
- 1. Что такое метод в классе? Определение метода в классе
- 2. Какие имена запрещается давать методам?
- 3. Общая форма определения метода в классе
- 4. Какое назначение имеет оператор return в теле метода?
- 5. Примеры методов в классах
- 6. Аргументы и формальные параметры метода
- 7. Как параметры передаются в метод? Синтаксис описания параметров метода
- 8. Использование ключевого слова void в параметрах методов
- 9. Что значит термин «недоступный код» в методе?
- 10. Пример, демонстрирующий различные способы возврата экземпляра класса из метода
Поиск на других ресурсах:
1. Что такое метод в классе? Определение метода в классе
Метод (функция) – это фрагмент подпрограммы, которая имеет имя. По этому имени можно вызывать подпрограмму (метод) один или несколько раз. Вместо имени будет подставляться тело подпрограммы (метода). Имя метода целесообразно давать таким, чтобы легко можно было распознать его функцию в программе.
Кроме данных (переменных) классы могут содержать и методы. Методы делают над данными некоторые операции (некоторую работу). Во многих случаях методы представляют доступ к данным класса. С помощью методов класса происходит взаимодействие класса с другими частями программы или другими классами.
Методы дополняют класс дополнительными функциональными возможностями. Как правило, каждый метод выполняет одну функцию.
⇑
2. Какие имена запрещается давать методам?
Имя метода может быль любым, которое соответствует правилам использования идентификаторов в C#. Однако не все имена можно использовать как имя метода.
В качестве имени метода запрещается задавать:
- имя Main() . Это имя точки входа в программу на C#, то есть из метода Main() начинается выполнение программы. Это имя зарезервировано;
- имена ключевых слов C#.
⇑
3. Общая форма определения метода в классе
В общем реализация метода в классе имеет следующий вид:
- MethodName – имя метода, который объявляется. По этому имени можно вызвать метод из класса или программы. При вызове метода обязательно указываются параметры метода, которые он получает;
- access – модификатор, который определяет доступ к методу из разных частей программы. Модификатор доступа может быть private , protected , public . Модификатор доступа может отсутствовать, в этом случае метод считается закрытым ( private );
- return_type – тип, возвращаемый методом. Если метод не возвращает значения, указывается тип void ;
- parameter_list – список параметров, который получает метод. Метод может не иметь параметров. В этом случае в скобках ничего не указывается.
⇑
4. Какое назначение имеет оператор return в теле метода?
Оператор return предназначен для возврата значения из метода. Если метод возвращает какое-то значение, то вызов оператора return есть обязательным.
Оператор return имеет две формы. Первая форма используется, когда метод возвращает значение. Вторая форма, когда метод не возвращает значения, то есть возвращает тип void.
Первая форма оператора return имеет следующий вид:
где value – значение, возвращаемое методом. Тип value должен быть совместимым с типом, который возвращает метод.
Вторая форма используется, когда метод не возвращает значения ( void ). В этом случае оператор return имеет вид:
В методе, который не возвращает значения, указывать оператор return не обязательно.
⇑
5. Примеры методов в классах
Пример 1. В примере реализуется класс DemoString . В классе объявляется:
- внутренняя переменная s типа string , которая есть строкой;
- конструктор класса без параметров. Инициализирует строку s пустым значением;
- конструктор класса с параметром, который инициализирует строку s ;
- метод IsLetter() , определяющий есть ли символ c в строке s . Символ c задается входным параметром метода. Метод возвращает значение логического типа bool ;
- метод Reverse() , принимающий входным параметром строку s и возвращающий реверсное значение этой строки.
Текст реализации класса следующий
Использование класса DemoString может быть следующим:
Пример 2. Объявляется класс Triangle , который содержит:
- три внутренние переменные с именами a , b , c ;
- параметризированный конструктор класса, получающий три параметра;
- внутренний метод класса GetArea() , определяющий площадь треугольника по его сторонам a , b , c . Метод не получает параметров. Метод возвращает значение площади треугольника или 0, если по сторонам a , b , c нельзя построить треугольник;
- внутренний метод класса без параметров IsTriangle() . Метод определяет, можно ли по трем сторонам a , b , c построить треугольник: сумма двух любых сторон должна быть больше третьей стороны. Метод возвращает логическое значение типа bool .
Текст объявления класса имеет следующий вид:
Использование класса Triangle и вызов методов класса может быть следующим:
⇑
6. Аргументы и формальные параметры метода
Аргументы метода – это значения которые передаются в метод во время вызова этого метода из другого метода или программного кода.
Формальные параметры метода – это переменные, которые получены методом как параметры и используются в этом методе. Формальные параметры метода описываются в скобках. Формальные параметры получают значения из аргументов при вызове метода.
Например. Пусть задан метод, который находит сумму цифр целого числа d , которое есть входным параметром
При вызове такого метода ему передается аргумент x , значение которого равно -2398. Этот аргумент передается формальному параметру d в методе Sum() .
⇑
7. Как параметры передаются в метод? Синтаксис описания параметров метода
Любой метод может получать параметры. Параметры необходимы методу для того, чтобы проводить над ними некоторые вычисления. Параметры метода задаются в скобках через запятую. Общая форма списка, состоящего из N параметров метода имеет вид:
Общая форма метода, который получает N параметров имеет вид:
- return_type – тип, который возвращается методом MethodName ;
- type1 , type2 , … typeN – типы параметров с именами param1 , param2 , …, paramN .
⇑
8. Использование ключевого слова void в параметрах методов
Если метод не получает параметров, то запись метода выглядит следующим образом:
где return_type – тип, который возвращает метод с именем MethodName() .
Например. Объявляется метод, который возвращает число Pi .
Если метод ничего не возвращает, то вместо типа указывается слово void
где parameter_list – список параметров метода с именем MethodName , которые он получает.
Если метод не возвращает и не получает параметров, то общий вид такого метода следующий:
Пример. Объявляется метод, который не получает и не возвращает ничего. В теле метода выводится сообщение «Hello world!» для консольных приложений.
⇑
9. Что значит термин «недоступный код» в методе?
Недоступный код – это часть кода метода, который никогда не будет выполнен. Недоступный код есть ошибкой программиста. Если в методе есть недоступный код, то компилятор выдает предупредительное сообщение соответствующего содержания.
Например. Ниже продемонстрирован метод, в котором есть недоступный (неиспользованный) код.
⇑
10. Пример, демонстрирующий различные способы возврата экземпляра класса из метода
В примере продемонстрированы различные способы возврата объекта класса из метода. По подобному примеру можно разрабатывать собственные методы, которые возвращают текущий экземпляр класса.
Задан класс Complex , реализующий комплексное число. В классе объявляются:
- две внутренние переменные real , imag ;
- два конструктора;
- метод GetRI() , возвращающий значение внутренних переменных real и imag как out-параметров;
- метод SetRI() , который с помощью параметров устанавливает новые значения внутренних переменных real , imag ;
- метод GetComplex() , возвращающий текущий объект (экземпляр) класса Complex с помощью оператора return ;
- метод GetComplex2() , возвращающий текущий объект (экземпляр) класса как out-параметр.В другом классе Program в функции main() продемонстрировано использование класса Complex и методов GetComplex() , GetComplex2() . Также в классе Program объявляется метод GetComplex3() , возвращающий экземпляр класса Complex .
Текст всего программного модуля, созданного по шаблону Console Application следующий
Из вышеприведенного примера видно, что продемонстрировано возврат объекта класса Complex с помощью трех методов (способов):
Не могу понять, что такое VOID в С++?
-
в функциях: в качестве возвращаемого значения:
- Вконтакте
- Вконтакте
- Вконтакте
- Вконтакте
- Вконтакте
- Вконтакте
Влад Конвой Все просто. Из курса Computer science. Рекомендую почитать SICP.
В математике На вопрос «Как это выглядит?» отвечает «функция». А на вопрос «Как же это получить?» отвечает «процедура».
В С-подобных языках именованные вычисления оформляются в виде функций. Но функции в С-подобных языках отвечают на оба вопроса и нет ни одного способа разграничить. Функция в С-подобных всегда должна что-то вернуть! Какой-то результат! Какой-то новый объект. Но что-то новая вернуть по-любому должна!
Теперь, а как же быть если хочется хоть как-то разграничить на функции и процедуры? Вот для этого есть «костыль» в виде ‘void’! Другими словами это способ сказать читающему код: «мы ничего не возвращаем, мы только создаем». Это и есть «как это получить?» в таких функциях только производство чего-то нового. Нарисовать окно, зашифровать диск, послать другу . А в в функциях возвращающих результат можно уже написать в терминах математики, то есть как что выглядит, но ни как что получается 😉
Урок №12. Функции
Вы уже знаете, что каждая программа должна содержать функцию main() (с которой она и начинает свое выполнение). Тем не менее, большинство программ используют и много других функций.
Функции
Функция — это последовательность стейтментов для выполнения определенного задания. Часто ваши программы будут прерывать выполнение одних функций ради выполнения других. Вы делаете аналогичные вещи в реальной жизни постоянно. Например, вы читаете книгу и вспомнили, что должны были сделать телефонный звонок. Вы оставляете закладку в своей книге, берете телефон и набираете номер. После того, как вы уже поговорили, вы возвращаетесь к чтению: к той странице, на которой остановились.
Программы на языке C++ работают похожим образом. Иногда, когда программа выполняет код, она может столкнуться с вызовом функции. Вызов функции — это выражение, которое указывает процессору прервать выполнение текущей функции и приступить к выполнению другой функции. Процессор «оставляет закладку» в текущей точке выполнения, а затем выполняет вызываемую функцию. Когда выполнение вызываемой функции завершено, процессор возвращается к закладке и возобновляет выполнение прерванной функции.
Функция, в которой находится вызов, называется caller, а функция, которую вызывают — вызываемая функция, например:
Результат выполнения программы:
Starting main()
In doPrint()
Ending main()
Эта программа начинает выполнение с первой строки функции main(), где выводится на экран следующая строка: Starting main() . Вторая строка функции main() вызывает функцию doPrint(). На этом этапе выполнение стейтментов в функции main() приостанавливается и процессор переходит к выполнению стейтментов внутри функции doPrint(). Первая (и единственная) строка в doPrint() выводит текст In doPrint() . Когда процессор завершает выполнение doPrint(), он возвращается обратно в main() к той точке, на которой остановился. Следовательно, следующим стейтментом является вывод строки Ending main() .
Обратите внимание, для вызова функции нужно указать её имя и список параметров в круглых скобках () . В примере, приведенном выше, параметры не используются, поэтому круглые скобки пусты. Мы детально поговорим о параметрах функций на следующем уроке.
Правило: Не забывайте указывать круглые скобки () при вызове функций.
Возвращаемые значения
Когда функция main() завершает свое выполнение, она возвращает целочисленное значение обратно в операционную систему, используя оператор return.
Функции, которые мы пишем, также могут возвращать значения. Для этого нужно указать тип возвращаемого значения (или «тип возврата»). Он указывается при объявлении функции, перед её именем. Обратите внимание, тип возврата не указывает, какое именно значение будет возвращаться. Он указывает только тип этого значения.
Затем, внутри вызываемой функции, мы используем оператор return, чтобы указать возвращаемое значение — какое именно значение будет возвращаться обратно в caller.
Рассмотрим простую функцию, которая возвращает целочисленное значение:
Результат выполнения программы:
Первый вызов функции return7() возвращает 7 обратно в caller, которое затем передается в std::cout для вывода.
Второй вызов функции return7() опять возвращает 7 обратно в caller. Выражение 7 + 3 имеет результат 10 , который затем выводится на экран.
Третий вызов функции return7() опять возвращает 7 обратно в caller. Однако функция main() ничего с ним не делает, поэтому ничего и не происходит (возвращаемое значение игнорируется).
Примечание: Возвращаемые значения не выводятся на экран, если их не передать объекту std::cout. В последнем вызове функции return7() значение не отправляется в std::cout, поэтому ничего и не происходит.
Тип возврата void
Функции могут и не возвращать значения. Чтобы сообщить компилятору, что функция не возвращает значение, нужно использовать тип возврата void. Взглянем еще раз на функцию doPrint() из вышеприведенного примера:
Эта функция имеет тип возврата void, который означает, что функция не возвращает значения. Поскольку значение не возвращается, то и оператор return не требуется.
Вот еще один пример использования функции типа void:
В первом вызове функции returnNothing() выводится Hi! , но ничего не возвращается обратно в caller. Точка выполнения возвращается обратно в функцию main(), где программа продолжает свое выполнение.
Второй вызов функции returnNothing() даже не скомпилируется. Функция returnNothing() имеет тип возврата void, который означает, что эта функция не возвращает значения. Однако функция main() пытается отправить это значение (которое не возвращается) в std::cout для вывода. std::cout не может обработать этот случай, так как значения на вывод не предоставлено. Следовательно, компилятор выдаст ошибку. Вам нужно будет закомментировать эту строку, чтобы компиляция прошла успешно.
Возврат значений функцией main()
Теперь у вас есть понимание того, как работает функция main(). Когда программа выполняется, операционная система делает вызов функции main() и начинается её выполнение. Стейтменты в main() выполняются последовательно. В конце функция main() возвращает целочисленное значение (обычно 0 ) обратно в операционную систему. Поэтому main() объявляется как int main() .
Почему нужно возвращать значения обратно в операционную систему? Дело в том, что возвращаемое значение функции main() является кодом состояния, который сообщает операционной системе об успешном или неудачном выполнении программы. Обычно, возвращаемое значение 0 (ноль) означает что всё прошло успешно, тогда как любое другое значение означает неудачу/ошибку.
Обратите внимание, по стандартам языка C++ функция main() должна возвращать целочисленное значение. Однако, если вы не укажете return в конце функции main(), компилятор возвратит 0 автоматически, если никаких ошибок не будет. Но рекомендуется указывать return в конце функции main() и использовать тип возврата int для функции main().
Еще о возвращаемых значениях
Во-первых, если тип возврата функции не void, то она должна возвращать значение указанного типа (использовать оператор return). Единственно исключение — функция main(), которая возвращает 0 , если не предоставлено другое значение.
Во-вторых, когда процессор встречает в функции оператор return, он немедленно выполняет возврат значения обратно в caller и точка выполнения также переходит в caller. Любой код, который находится за оператором return в функции — игнорируется.
Функция может возвращать только одно значение через return обратно в caller. Это может быть либо число (например, 7 ), либо значение переменной, либо выражение (у которого есть результат), либо определенное значение из набора возможных значений.
Но есть способы обойти правило возврата одного значения, возвращая сразу несколько значений, но об этом детально мы поговорим на соответствующем уроке.
Наконец, автор функции решает, что означает её возвращаемое значение. Некоторые функции используют возвращаемые значения в качестве кодов состояния для указания результата выполнения функции (успешно ли выполнение или нет). Другие функции возвращают определенное значение из набора возможных значений. Кроме того, существуют функции, которые вообще ничего не возвращают.
Повторное использование функций
Одну и ту же функцию можно вызывать несколько раз, даже в разных программах, что очень полезно:
Что возвращает void c
Метод может возвращать значение, какой-либо результат. В примере выше были определены два метода, которые имели тип void . Методы с таким типом не возвращают никакого значения. Они просто выполняют некоторые действия.
Но методы также могут возвращать некоторое значение. Для этого применяется оператор return , после которого идет возвращаемое значение:
Например, определим метод, который возвращает значение типа string :
Метод GetMessage имеет тип string , следовательно, он должен возвратить строку. Поэтому в теле метода используется оператор return , после которого указана возвращаемая строка.
При этом методы, которые в качестве возвращаемого типа имеют любой тип, кроме void , обязательно должны использовать оператор return для возвращения значения. Например, следующее определение метода некорректно:
Также между возвращаемым типом метода и возвращаемым значением после оператора return должно быть соответствие. Например, в следующем случае возвращаемый тип — string , но метод возвращает число (тип int), поэтому такое определение метода некорректно:
Результат методов, который возвращают значение, мы можем присвоить переменным или использовать иным образом в программе:
Метод GetMessage() возвращает значение типа string . Поэтому мы можем присвоить это значение какой-нибудь переменной типа string: string message = GetMessage();
Либо даже передать в качестве значения параметру другого метода:
В вызове PrintMessage(GetMessage()) сначада вызывается метод GetMessage() и его результат передается параметру message метода PrintMessage
После оператора return также можно указывать сложные выражения или вызовы других методов, которые возвращают определенный результат. Например, определим метод, который возвращает сумму чисел:
Метод Sum() имеет тип int , следовательно, он должен возвратить значение типа int — целое число. Поэтому в теле метода используется оператор return , после которого указано возвращаемое число (в данном случае результат суммы переменных x и y).
Сокращенная версия методов с результатом
Также мы можем сокращать методы, которые возвращают значение:
аналогичен следующему методу:
аналогичен следующему методу:
Выход из метода
Оператор return не только возвращает значение, но и производит выход из метода. Поэтому он должен определяться после остальных инструкций. Например:
С точки зрения синтаксиса данный метод корректен, однако его инструкция Console.WriteLine(«After return») не имеет смысла — она никогда не выполнится, так как до ее выполнения оператор return возвратит значение и произведет выход из метода.
Однако мы можем использовать оператор return и в методах с типом void . В этом случае после оператора return не ставится никакого возвращаемого значения (ведь метод ничего не возвращает). Типичная ситуация — в зависимости от опеределенных условий произвести выход из метода:
Здесь метод PrintPerson() в качестве параметров принимает имя и возраст пользователя. Однако в методе вначале мы проверяем, соответствует ли возраст некоторому диапазону (меньше 120 и больше 0). Если возраст находится вне этого диапазона, то выводим сообщение о недопустимом возрасте и с помощью оператора return выходим из метода. После этого метод заканчивает свою работу.
Однако если возраст корректен, то выводим информацию о пользователе на консоль. Консольный вывод: