Foreversoft.ru

IT Справочник
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Методы си шарп

Методы

Следует отметить, что официальная терминология C# делает различие между функциями и методами. Согласно этой терминологии, понятие «функция-член» включает не только методы, но также другие члены, не являющиеся данными, класса или структуры. Сюда входят индексаторы, операции, конструкторы, деструкторы, а также — возможно, несколько неожиданно — свойства. Они контрастируют с данными-членами: полями, константами и событиями.

Объявление методов

В C# определение метода состоит из любых модификаторов (таких как спецификация доступности), типа возвращаемого значения, за которым следует имя метода, затем список аргументов в круглых скобках и далее — тело метода в фигурных скобках:

Каждый параметр состоит из имени типа параметра и имени, по которому к нему можно обратиться в теле метода. Вдобавок, если метод возвращает значение, то для указания точки выхода должен использоваться оператор возврата return вместе с возвращаемым значением.

Если метод не возвращает ничего, то в качестве типа возврата указывается void, поскольку вообще опустить тип возврата невозможно. Если же он не принимает аргументов, то все равно после имени метода должны присутствовать пустые круглые скобки. При этом включать в тело метода оператор возврата не обязательно — метод возвращает управление автоматически по достижении закрывающей фигурной скобки.

Возврат из метода и возврат значения

В целом, возврат из метода может произойти при двух условиях. Во-первых, когда встречается фигурная скобка, закрывающая тело метода. И во-вторых, когда выполняется оператор return. Имеются две формы оператора return: одна — для методов типа void (возврат из метода), т.е. тех методов, которые не возвращают значения, а другая — для методов, возвращающих конкретные значения (возврат значения).

Давайте рассмотрим пример:

Использование параметров

При вызове метода ему можно передать одно или несколько значений. Значение, передаваемое методу, называется аргументом. А переменная, получающая аргумент, называется формальным параметром, или просто параметром. Параметры объявляются в скобках после имени метода. Синтаксис объявления параметров такой же, как и у переменных. А областью действия параметров является тело метода. За исключением особых случаев передачи аргументов методу, параметры действуют так же, как и любые другие переменные.

В общем случае параметры могут передаваться методу либо по значению, либо по ссылке. Когда переменная передается по ссылке, вызываемый метод получает саму переменную, поэтому любые изменения, которым она подвергнется внутри метода, останутся в силе после его завершения. Но если переменная передается по значению, вызываемый метод получает копию этой переменной, а это значит, что все изменения в ней по завершении метода будут утеряны. Для сложных типов данных передача по ссылке более эффективна из-за большого объема данных, который приходится копировать при передаче по значению.

Давайте рассмотрим пример:

Обратите внимание, что значение i осталось неизменным, но измененные значения в myArr также изменились в исходном массиве arr1, так как массивы являются ссылочными типами.

Поведение строк также отличается. Дело в том, что строки являются неизменными (изменение значения строки приводит к созданию совершенно новой строки), поэтому строки не демонстрируют поведение, характерное для ссылочных типов. Любые изменения, проведенные в строке внутри метода, не влияют на исходную строку.

Методы си шарп

Урок № 13. Методы в C#

Создание и использование методов

Доброго времени суток! В этом уроке я расскажу, что же такое методы в C#. Я уже не раз употреблял этот термин, и пришла пора разобраться с ним. Как всегда, я не буду перегружать Вас информацией, дам только самое необходимое (разумеется, на мой взгляд).

И так, что же такое метод? В контексте объектно-ориентированного программирования, метод – это подпрограмма. А подпрограмма, в свою очередь – это фрагмент программы, который написать нужно один раз, а использовать его можно многократно (для выполнения однотипных действий). Это довольно удобно по нескольким причинам, например, можно реализовать определенный алгоритм один раз, хорошо его отладить, и быть уверенным в правильности его работы применяя его в дальнейшем многократно. Да и использование подпрограмм, значительно сокращает объем исходного кода проекта. Или еще представьте такую ситуацию, мы один раз написали подпрограмму, которая выполняет определенные действия, и многократно её используем, а потом, технические требования заставляют нас модифицировать алгоритм этих самых действий, так вот, нам достаточно всего один раз изменить код подпрограммы (изменения применяется во всех местах её использования). Думаю я убедил Вас в том, что познакомиться с методами в C# обязательно стоит!

И так, к делу! Мы уже знакомы с методом «Main» в главном файле программы. Это, так называемая точка входа в программу, главный метод наших программ. Этот метод, Visual Studio сгенерила сама, давайте рассмотрим, как он выглядит в исходном состоянии (сразу после создания нового проекта). Для этого создадим новый проект консольного приложения и рассмотрим код метода «Main», что называется под детально! А выглядит он вот так:

Читать еще:  Паскаль переход на новую строку

Я преднамеренно привел код метода «Main» вместе с объемлющим его кодом. Метод «Main» относится к классу «Program» (т.е. находится внутри класса «Program«).

Что такое классы в C# я сейчас подробно рассказывать не буду, скажу лишь, что класс – это описание некого типа данных, который характеризуется набором представляемых данных и набором возможных операций над ними.

Метод состоит из так называемого заголовка и тела:

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

Далее идет ключевое слово void, в этом месте, указывается тип возвращаемого методом значения. Что это значит? Это значит, что выполнив какую-то работу, метод может вернуть её результат, а мы можем сохранить его в какой-либо переменной (и использовать для дальнейших нужд). А тип переменной, должен совпадать с типом возвращаемого значения! Но не каждый метод должен возвращать какое-то значение, и именно в тех случаях, когда метод «ничего не возвращает» указывается ключевое слово void.

Если бы метод «Main» должен был возвращать целое число, то вместо слова void было бы использовано слово int.

После ключевого слова void следует название метода, в данном случае – это Main. После названия идут круглые скобки, в которых определяются аргументы метода. В нашем случае – это «string[] args». Т.е. массив строк. Аргументы метода – это входные данные, которые получает метод. Аргументы метода в заголовке еще называют его формальными параметрами.

Как и в случае возвращаемого значения, не каждый метод нуждается во входных данных, и тогда круглые скобки после названия метода будут пустыми.

Для примера, рассмотри заголовок статического метода, который будет принимать два целочисленных аргумента, и возвращать их сумму:

Думаю что с заголовками методов более или менее понятно, давайте рассмотрим, что такое тело метода. А это просто набор операторов, заключенный в фигурные скобки сразу после заголовка метода.

Метод, чей заголовок мы рассматривали ранее, целиком, может выглядеть примерно так:

Т.е. по факту, мы уже имеем написанный метод (подпрограмму), но теперь нужно им как-то воспользоваться, иначе, зачем он нам нужен? А чтобы воспользоваться методом, нужно его, так сказать, вызвать! Делается это следующим образом:

В примере выше мы вызвали метод «Sum» с фактическими параметрами, где первый из них равен 24 а второй – 6. Результат метода будет сохранен в переменной «result» и позже мы выводим его в консоль. В принципе, все просто!

А теперь, давайте применим полученные знания на практике! Улучшим пример из предыдущего урока. В нем мы дважды просили пользователя ввести целое число с клавиатуры, т.е. выполняли однотипные действия. Давайте оптимизируем наш код, создадим метод, который будет принимать в качестве аргумента текст приглашения пользователю, а возвращать введенное им число, после чего дважды вызовем этот метод с разными формальными параметрами.

Функциональность программы осталась той же, но исходный код принял более оптимальный вид. На этот раз хватит информации, в дальнейшем мы еще не раз будет работать с различными методами, и Вы получите новые знания! А в следующем уроке, подробнее вернемся к обработке ошибок, в нем тоже будет интересная информация!

Method C# | Действия и методы C#

Опубликовано Константин Туйков в 25.12.2019 25.12.2019

Ранее мы рассмотрели, что из себя представляют объекты на c#, и как описываются свойства объектов. Однако объект, обладающий одними только свойствами зачастую бесполезен, потому как наравне с некоторыми параметрами объект обладает определенным набором операций, которые могут проводиться над ним, либо же выполняться самим объектом. Эти операции и называются методы C#.

Методы C#

Методы описываются внутри класса, в следующем формате:

Рассмотрим более подробно запись, приведенную выше. С модификаторами доступа мы познакомились ранее, ровно как и с типами данных. К примеру, если метод должен быть доступен для вызова извне, и возвращает значение строкового типа, мы получим подобную запись:

Читать еще:  Что такое си модуль для телевизора

Если же не предполагается возвращать результат работы метода, используется слово void. Параметры для методов так же указываются опционально. То есть их может и не быть совсем, как в нашем SomeMethod. Описываются параметры следующим образом: . Если бы в нашем методе были параметры, это выглядело бы примерно так.

Как вы могли заметить, третий параметр несколько отличается от первых двух — для него указано значение по умолчанию. Таким образом, мы можем вызывать SomeMethod, не указывая значение для третьего параметра. Также следует обратить внимание на правила именования методов и параметров. Microsoft рекомендуют использовать CamelCase при именовании методов (каждое слово с большой буквы) и pascalCase для переменных (первое слово с маленькой буквы, каждое последующее — с большой). И, разумеется, имена должны быть осмысленными и нести смысловую нагрузку. Комментарии, конечно, никто не отменял, но читать код с нормально именованными методами и переменными значительно приятнее и проще. Для методов, которые должны возвращать значение, необходимо указывать ключевое слово return. После этого слова должна идти переменная, значение которой возвращает метод. Например.

Смысловой нагрузки этот код не несет (ну, разве что для фанатов фильма «Криминальное чтиво»).

Перегрузка методов

Предположим, у нас есть метод, который в зависимости от набора переменных должен выполнять разные действия. К примеру:

Оба метода называются pow, однако первый вернет нам квадрат числа, а второй вернет число в степени power. Соответственно подобное написание и будет считаться перегрузкой метода. Если же мы попытаемся создать два метода с абсолютно идентичным набором параметров, типы данных и количество которых совпадают, IDE оповестит нас об ошибке. Так же существует более явная перегрузка методов при помощи ключевого слова override, однако об этом мы поговорим позднее.

Конструктор

Любой класс обладает некоторым набором свойств. А как корректно эти свойства установить при создании объекта класса? В данном случае на помощь приходит специальный метод — конструктор. Описывается он так:

По умолчанию каждый класс обладает конструктором без свойств, который возвращает объект с пустыми полями. При этом, несмотря на то, что конструктор возвращает объект, слово return в нем не указывается. Как и простой метод конструктор может быть перегружен за счет указания параметров.

Статичность

А если нам нужно вызвать метод класса не создавая для этого отдельный объект? В данном случае достаточно прописать этому методу ключевое слово static.

Таким образом, мы сможем совершенно спокойно работать с данным методом не создавая объект класса. Для вызова используется конструкция.

Статичным можем быть и целый класс. Однако в этом случае следует учесть ряд особенностей. Во-первых, для статического класса конструктор не имеет модификатора доступа и не перегружается. Так же объект статического класса существует в единственном числе для всей исполняемой программы. Но главным бонусом такого класса является возможность хранения состояния программы, которое было бы доступно из любой точки кода.

Рекурсивный вызов методов

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

Деструктор

Что произойдет с памятью, после того как объект класса отработает? По сути, она должна быть очищена. Так обычно и происходит. Однако, чтобы быть на сто процентов уверенными, мы можем создать метод-деструктор. Чтобы использовать ручной сбор мусора класс обязан реализовать интерфейс IDisposable. Интерфейсы мы рассмотрим несколько позднее.

Пример

Вернемся к нашему персонажу.

Рассмотрим код, который наделяет нашего персонажа набором методов для движения и выживания.

Методы C# — Итоги

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

Кроме того, рекомендую прочитать статью Memento C# | Паттерн проектирования Хранитель C#. А также подписывайтесь на группу ВКонтакте, Telegram и YouTube-канал. Там еще больше полезного и интересного для программистов.

Методы

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

Метод – это конструкция в виде блока кода, которая выполняет некоторые действия, и имеет логическую смысловую нагрузку. Аналогом методов языка C#, являются математические функции.

Читать еще:  Рандом в си шарп

В некоторых языках программирования, разделяют функции и процедуры. В языке C#, такого разделения нет, хотя условно функциями можно считать методы которые возвращают значения, а процедурами – методы, которые не возвращают значений.

Синтаксически метод выглядит следующим образом:

  • modifiers – необязательные модификаторы доступа;
  • type – возвращаемый тип данных:
    • если метод не возвращает значения, то используется тип void;
    • если возвращает, то в теле метода должно присутствовать ключевое слово return, после которого указывается возвращаемое значение(того же типа что и тип метода);
  • name – имя метода;
  • parameters – необязательные параметры.

Рассмотрим примеры методов:

Все три метода вызываются в основном методе программы – Main. Они имеют модификатор доступа static. Первые два метода типа void, то есть ничего не возвращают.
PrintHelloWorld – вызывает Console.WriteLine с текстовым аргументом.
PrintHello – принимает в качестве аргумента текстовую строку и после модификации текста, передает его в другой метод Console.WriteLine, который выводит текст в консоль.
Cube – принимает на вход целое число, возводит его в куб и возвращает результат.

Когда использовать методы

Если часть кода повторяется два и больше раз, то есть смысл вынести инструкции в отдельный метод. Рассмотрим пример ввода элементов массива с клавиатуры:

Как видим, код для заполнения массивов дублируется, по этому мы можем создать метод для заполнения массива значениями, которые вводятся с клавиатуры:

В качестве аргументов, методу передаются: название массива и количество элементов(длина).

После этого, метод можно многократно использовать, для создания новых массивов целых чисел:

Оператор return

Оператор return завершает выполнение метода, и может возвращать значение. Инструкции которые размещены после return игнорируются. В методе разрешается многократное использование оператора return, но иногда это усложняет читабельность кода программы. Если метод имеет тип void – оператор return может использоваться для преждевременного выхода:

Параметры методов

Параметры метода позволяют передавать в него некоторые данные. Во время вызова метода, параметры передаются в том же порядке, в котором они описаны. То есть значения аргумента присваивается параметру в зависимости от его позиции в списке параметров.

Передача параметров по значению

Для примитивных типов данных, передача параметров передача параметров в метод, производиться по значению. То есть в качестве аргумента передается копия данных. В теле метода, мы можем изменять переменные параметров, при этом изменения никак не влияют на переданные данные:

Передача параметров по ссылке

Для передачи переменных по ссылке, используется модификатор ref. Если параметр обозначен ключевым словом ref, то любые изменения этого параметра в теле метода отражаются на переданной переменной:

Модификатор ref указывается как в описании, так и при вызове метода.

Выходные параметры

Выше рассмотренные параметры имеют название входные, поскольку передаются на вход метода. Кроме этого, в языке C#, есть выходные параметры. Для того, чтобы пометить параметр ка выходной, используется модификатор out.

Рассмотрим метод для деления двух чисел, он возвращает текст ошибки, если деление не возможно, а в качестве выходного параметра – результат операции:

Как видно из примера, C# 7.0 поддерживает две равносильные формы синтаксиса для записи выходных параметров:

  • переменная объявляется перед вызовом метода;
  • переменная объявляется в списке аргументов.

Выходному параметру, в теле метода, обязательно должно быть присвоено значение.
Как и в случае с ref, модификатор out указывается в описании и при вызове метода.

Именованные аргументы

В C# есть возможность передавать параметры в произвольном порядке, для этого используются именованные аргументы(named arguments). Для явного указания имени аргумента, используется следующий синтаксис:

Пример программы с именованными аргументами:

Опциональные параметры

В методах можно использовать необязательные или опциональные параметры, которые имеют заданное по умолчанию значение.

Рассмотрим пример метода для вычисления процентов по банковскому депозиту. Обычная депозитная ставка 10%, кроме того, постоянные клиенты могут получить бонус:

Необязательные параметры должны быть последними в списке аргументов метода.

Упрощенная запись методов

Начиная с C# 6.0, методы, в которых содержится всего одна инструкция, можно записывать в сокращенной форме посредством лямбда-выражений, это дает возможность сократить количество написанного кода.

К примеру, математическую функцию y = x 2 — 2/x, можно записать:

Использовав лямбда-выражение, код будет иметь следующий вид:

Аналогичным образом можно упростить метод, который не возвращает значений:

Локальные функции

В версии C# 7.0, появилась возможность использовать методы вложенные в метод, такие конструкции носят название – локальные функции. Они поддерживают как классическую, так и упрощенную форму синтаксиса:

Для всех рассмотренных методов используется модификатор static, поскольку предполагается их непосредственное использование в главном методе программы – Main.

Ссылка на основную публикацию
Adblock
detector