Методы (Руководство по программированию на C#)
Метод — это блок кода, содержащий ряд инструкций. Программа инициирует выполнение инструкций, вызывая метод и указывая все аргументы, необходимые для этого метода. В C# все инструкции выполняются в контексте метода.
Метод Main является точкой входа для каждого приложения C# и вызывается общеязыковой средой выполнения (CLR) при запуске программы. В приложении, использующем инструкции верхнего уровня, метод Main создается компилятором и содержит все инструкции верхнего уровня.
В этой статье рассматриваются названные методы. Дополнительные сведения об анонимных функциях см. в статье Лямбда-выражения.
Сигнатуры методов
Тип возврата метода не является частью сигнатуры метода в целях перегрузки метода. Однако он является частью сигнатуры метода при определении совместимости между делегатом и методом, который он указывает.
Параметры метода заключаются в скобки и разделяются запятыми. Пустые скобки указывают, что параметры методу не требуются. Этот класс содержит четыре метода:
Доступ к методу
Вызов метода в объекте аналогичен доступу к полю. После имени объекта добавьте точку, имя метода и круглые скобки. Аргументы перечисляются в этих скобках и разделяются запятыми. Таким образом, методы класса Motorcycle могут вызываться, как показано в следующем примере:
Параметры и аргументы метода
Определение метода задает имена и типы всех необходимых параметров. Когда вызывающий код вызывает метод, он предоставляет конкретные значения, называемые аргументами, для каждого параметра. Аргументы должны быть совместимы с типом параметра, но имя аргумента (если есть), используемое в вызывающем коде, не обязательно должно совпадать с именем параметра, указанным в методе. Пример:
Передача по ссылке и передача по значению
При передаче в метод объекта ссылочного типа передается ссылка на этот объект. То есть метод получает не сам объект, а аргумент, который указывает расположение объекта. При изменении члена объекта с помощью этой ссылки это изменение отражается в аргументе в вызывающем методе, даже если объект передается по значению.
Теперь, если передать объект, основанный на этом типе, в метод, то будет передана ссылка на объект. В следующем примере объект типа SampleRefType передается в метод ModifyObject :
Дополнительные сведения о передаче ссылочных типов по ссылке и по значению см. в разделах Передача параметров ссылочного типа и Ссылочные типы.
Возвращаемые значения
Чтобы использовать значение, возвращаемое из метода, вызывающий метод может применять сам вызов метода везде, где будет достаточно значения того же типа. Можно также назначить возвращаемое значение переменной. Например, следующие два примера кода достигают одной и той же цели.
Чтобы использовать значение, возвращаемое по ссылке из метода, необходимо объявить локальную ссылочную переменную, если планируется изменение значения. Например, если метод Planet.GetEstimatedDistance возвращает значение Double по ссылке, можно определить его как локальную ссылочную переменную с использованием кода следующего вида:
Для получения дополнительной информации см. return.
Асинхронные методы
С помощью функции async можно вызывать асинхронные методы, не прибегая к использованию явных обратных вызовов или ручному разделению кода между несколькими методами или лямбда-выражениями.
Асинхронный метод возвращается в вызывающий объект, когда он встречает первый ожидаемый объект, выполнение которого еще не завершено, или когда выполнение асинхронного метода доходит до конца — в зависимости от того, что происходит раньше.
Определения текста выражений
Часто используются определения методов, которые просто немедленно возвращаются с результатом выражения или которые имеют единственную инструкцию в тексте метода. Для определения таких методов существует сокращенный синтаксис с использованием => :
Если метод возвращает void или является асинхронным методом, то текст метода должен быть выражением инструкции (так же, как при использовании лямбда-выражений). Свойства и индексаторы должны быть только для чтения, и вы не должны использовать ключевое слово get метода доступа.
Iterators
Дополнительные сведения см. в разделе Итераторы.
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.
Метод (объектно-ориентированное программирование)
Как и процедура в процедурном программировании, метод состоит из некоторого количества операторов для выполнения какого-то действия, имеет набор входных аргументов и возвращаемое значение.
Различают методы класса и метакласса (или в другом толковании статические методы): первые работают с данными объекта, вторые имеют доступ только к данным класса, и общие для всех объектов данного класса. Для статических методов класса не требуется создание объекта.
Методы в некоторых языках (таких как C++ или C# могут иметь модификаторы доступа, которые ограничивают места в программном коде, где могут быть вызваны эти методы (например, модификатор private сделает метод доступным только внутри класса).
Смотреть что такое «Метод (объектно-ориентированное программирование)» в других словарях:
Объектно-ориентированное программирование на Python — Объектно ориентированное программирование на Python программирование на Python с использованием парадигмы ООП: с самого начала Python проектировался как объектно ориентированный язык программирования[1]. Содержание 1 Введение 1.1 … Википедия
объектно-ориентированное программирование — Метод построения программ как совокупностей объектов и классов объектов, которые могут вызывать друг друга для выбора и выполнения операций. Примечание Объекты состоят из данных и операций над данными. [ГОСТ 19781 90] объектно ориентированное… … Справочник технического переводчика
Объектно-ориентированное программирование — Эта статья во многом или полностью опирается на неавторитетные источники. Информация из таких источников не соответствует требованию проверяемости представленной информации, и такие ссылки не показывают значимость темы статьи. Статью можно… … Википедия
Объектно-ориентированное программирование на Питоне — С самого начала Питон проектировался как объектно ориентированный язык программирования [1]. Содержание 1 Введение 1.1 Принципы ООП … Википедия
Событие (объектно-ориентированное программирование) — У этого термина существуют и другие значения, см. Событие. Событие в объектно ориентированное программировании это сообщение, которое возникает в различных точках исполняемого кода при выполнении определённых условий. События предназначены для… … Википедия
Интерфейс (объектно-ориентированное программирование) — У этого термина существуют и другие значения, см. Интерфейс (значения). Интерфейс (от лат. inter «между», и face «поверхность») семантическая и синтаксическая конструкция в коде программы, используемая для специфицирования… … Википедия
Класс (объектно-ориентированное программирование) — Класс, наряду с понятием «объект», является важным понятием объектно ориентированного подхода в программировании (хотя существуют и бесклассовые объектно ориентированные языки, например, Прототипное программирование). Под классом подразумевается… … Википедия
Метод объектно-ориентированной декомпозиции — основной метод объектно ориентированного программирования, описывающий: статическую структуру системы в терминах объектов и связей между ними; поведение системы в терминах обмена сообщениями между объектами. См. также: Объектно ориентированное… … Финансовый словарь
Субъектно-ориентированное программирование — Парадигмы программирования Агентно ориентированная Компонентно ориентированная Конкатенативная Декларативная (контрастирует с Императивной) Ограничениями Функциональная Потоком данных Таблично ориентированная (электронные таблицы) Реактивная … Википедия
Объектно-ориентированный подход — Объектно ориентированное программирование (ООП) парадигма программирования, в которой основными концепциями являются понятия объектов и классов (либо, в менее известном варианте языков с прототипированием прототипов). Класс это тип, описывающий… … Википедия
Метод (программирование)
Как и процедура в процедурном программировании, метод состоит из некоторого количества операторов для выполнения какого-то действия и имеет набор входных аргументов.
Различают простые методы и статические методы (методы класса):
* простые методы имеют доступ к данным объекта (конкретного экземпляра данного класса),
статические методы не имеют доступа к данным объекта, и для их использования не нужно создавать экземпляры (данного класса).Методы предоставляют интерфейс, при помощи которого осуществляется доступ к данным объекта некоторого класса, тем самым, обеспечивая инкапсуляцию данных.
В зависимости от того, какой уровень доступа предоставляет тот или иной метод, выделяют:
открытый (public) интерфейс — общий интерфейс для всех пользователей данного класса;
защищённый (protected) интерфейс — внутренний интерфейс для всех наследников данного класса;
закрытый (private) интерфейс — интерфейс, доступный только изнутри данного класса.Такое разделение интерфейсов позволяет сохранять неизменным открытый интерфейс, но изменять внутреннюю реализацию.
Связанные понятия
Упоминания в литературе
Связанные понятия (продолжение)
По одной из классификаций, языки программирования неформально делятся на сильно и слабо типизированные (англ. strongly and weakly typed), то есть обладающие сильной или слабой системой типов. Эти термины не являются однозначно трактуемыми, и чаще всего используются для указания на достоинства и недостатки конкретного языка. Существуют более конкретные понятия, которые и приводят к называнию тех или иных систем типов «сильными» или «слабыми».
В языках программирования объявле́ние (англ. declaration) включает в себя указание идентификатора, типа, а также других аспектов элементов языка, например, переменных и функций. Объявление используется, чтобы уведомить компилятор о существовании элемента; это весьма важно для многих языков (например, таких как Си), требующих объявления переменных перед их использованием.
Из-за путаницы с терминологией словом «оператор» в программировании нередко обозначают операцию (англ. operator), см. Операция (программирование).Инстру́кция или опера́тор (англ. statement) — наименьшая автономная часть языка программирования; команда или набор команд. Программа обычно представляет собой последовательность инструкций.
Побо́чные эффе́кты (англ. side effects) — любые действия работающей программы, изменяющие среду выполнения (англ. execution environment). Например, к побочным эффектам относятся.
Сопрограммы (англ. coroutines) — методика связи программных модулей друг с другом по принципу кооперативной многозадачности: модуль приостанавливается в определённой точке, сохраняя полное состояние (включая стек вызовов и счётчик команд), и передаёт управление другому. Тот, в свою очередь, выполняет задачу и передаёт управление обратно, сохраняя свои стек и счётчик.
Чем отличается «метод» от «функции»
Неоднократно видел использование термина «метод» для обозначения функций-членов классов в противоположность термину «функция» для обозначения «свободных» функций нечленов. С другой стороны, в текстах о Си++, часто всё называют «функцией» и члены и нечлены.
Собственно, какова разница между терминами «метод» и «функция», почему в Си++ члены не называют «методами»?
6 ответов 6
И чего так много слов то? Все просто:
Метод всегда является функцией, а функция не всегда является методом.
Вот определение метода:
Вот определение функции:
Как видим, первое является разновидностью второго. Насчет того, что в C++ все называют функциями я не соглашусь, понятие метод класса тоже часто употребляется. Просто функция является более общим названием.
Нет единой устоявшейся техники наименования сущностей в языках программирования и каждый язык, чтобы немного отличаться от других, по историческим причинам имеет свой набор названий и соглашений.
почему в Си++ члены не называют «методами»?
Во многих языках 60-70 годов не было ООП в том понимании, которое известно сейчас. С++ изначально был просто «фронтом» (то есть надстройкой) над обычным Си. Был долгий период, когда это уже был не Си, но и ещё и не C++. Компилятора C++ не было, а был транслятор в Си. Видимо, поэтому там закрепилось функция класса/переменная класса. Сейчас Страуструп предлагает N4174, и если его примут, то грань между обычными функциями и функциями класса размоется ещё больше.
Собственно, какова разница между терминами «метод» и «функция»
многие автора книг по с++ называют функции класса методами. Как быть?
Тут все сложно. Например, Эккель так делает видимо потому, что он ещё и много книг о Java написал. Также не стоит забывать, что многие книги мы читаем в переводе, а они «исправляют», потому что переводчику так понятнее.
так можно ли называть функции класса с++ методами?
Это точно так же, как использовать мат/обсценную лексику в высшем обществе. Или пытаться объясниться с гопниками языком Тургенева и стихами Пушкина/Блока.
СОДЕРЖАНИЕ
Переопределение и перегрузка
Методы аксессора, мутатора и менеджера
Методы доступа используются для чтения значений данных объекта. Методы мутатора используются для изменения данных объекта. Методы диспетчера используются для инициализации и уничтожения объектов класса, например конструкторов и деструкторов.
Конструкторы
Деструкторы
Финализаторы
Абстрактные методы
Пример
Следующий код Java показывает абстрактный класс, который необходимо расширить:
Следующий подкласс расширяет основной класс:
Реабстракция
На практике это используется редко.
Пример
В C # виртуальный метод можно переопределить абстрактным методом. (Это также относится к Java, где все не приватные методы являются виртуальными.)
Методы интерфейсов по умолчанию также могут быть реорганизованы, требуя подклассов для их реализации. (Это также относится к Java.)
Методы класса
Специальные методы
Специальные методы очень зависят от языка, и язык может не поддерживать ни одного, некоторых или всех специальных методов, определенных здесь. Компилятор языка может автоматически генерировать специальные методы по умолчанию, или программисту может быть разрешено опционально определять специальные методы. Большинство специальных методов не могут быть вызваны напрямую, а компилятор генерирует код для их вызова в подходящее время.
Статические методы
В Java обычно используется статический метод:
Этот статический метод не имеет объекта-владельца и не работает в экземпляре. Он получает всю информацию из своих аргументов.
Статический метод можно вызвать, даже если экземпляры класса еще не существуют. Статические методы называются «статическими», потому что они разрешаются во время компиляции на основе класса, для которого они вызываются, а не динамически, как в случае с методами экземпляра, которые разрешаются полиморфно на основе типа среды выполнения объекта.
Операторы присваивания копий
Операторы присваивания копий определяют действия, которые должны выполняться компилятором, когда объект класса назначается объекту класса того же типа.
Операторские методы
Методы операторов определяют или переопределяют символы операторов и определяют операции, которые должны выполняться с символом и соответствующими параметрами метода. Пример C ++:

