Метод (Method)

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

Структура метода

Как уже сказано ранее, метод является функцией-членом класса.

По сути метод — это функция. Термин «метод» используется, когда функция принадлежит классу. В языке C все подобные конструкции просто называются функциями.

Метод состоит из двух основных частей: заголовок метода (объявление метода) и тело метода.

  1. Заголовок метода: Определяет все характеристики метода и содержит следующую информацию:
    • Есть ли у метода возвращаемое значение; если есть — указывается тип возвращаемого значения
    • Имя метода
    • Типы передаваемых и возвращаемых данных, а также правила их обработки
  2. Тело метода: Состоит из последовательности выполняемых инструкций. Выполнение начинается с первой строки тела и продолжается по порядку.

Рассмотрим пример

    string Introduce(string name,int age)
    {
        string words = $"hello my name is {name},i'm {age} years old";
        Console.WriteLine(words);
        return words;
    }Code language: C# (cs)

Заголовок метода: string Introduce(string name,int age)

  • string : Тип возвращаемого значения — строка
  • Introduce: Имя метода
  • (string name,int age): Список параметров. Эти два элемента являются переменными, которые принимают имя и возраст извне и могут использоваться внутри тела метода.
На изображении выше описаны все составные части метода

Как вызвать этот метод?

Данный метод находится в классе Program вместе с методом Main. Однако Main — статический метод. Статические методы не могут напрямую вызывать нестатические методы. Чтобы вызвать Introduce, сначала нужно создать экземпляр класса Program и обращаться к методу через этот экземпляр.

class Program
{
    static void Main()
    {
        Program program = new Program();
        program.Introduce("John", 30);
    }

    string Introduce(string name,int age)
    {
        string words = $"hello my name is {name},i'm {age} years old";
        Console.WriteLine(words);
        return words;
    }
}Code language: C# (cs)

Прямой вызов, как показано ниже, вызовет ошибку компиляции

Правильный подход: внутри функции Main создать экземпляр Program с помощью new, а затем вызвать Introduce через этот экземпляр

Program program = new Program();//√
program.Introduce("John", 30);Code language: C# (cs)

Тело метода

Тело метода может содержать ноль или несколько выполняемых инструкций.

Тело метода — это блок кода (набор инструкций в фигурных скобках). Внутри блока кода можно размещать следующие элементы:

  • Локальные переменные
  • Операторы управления потоком (циклы, ветвления и т.д.)
  • Вызовы других методов
  • Вложенные подблоки кода
  • Локальные функции (подметоды, определенные внутри метода) [рассмотрим позже]
class Program
{
    static void Main()
    {
        int age = 3; // Локальная переменная, начальное значение 3
        while (age > 0) // Оператор управления потоком
        {
            --age;
            Introduce("Tom", age); // Вызов метода
        }

        {
            //Вложенный подблок кода
        }
    }

    static string Introduce(string name,int age)
    {
        string words = $"hello my name is {name},i'm {age} years old";
        Console.WriteLine(words);
        return words;
    }
}
Code language: JavaScript (javascript)

В примере выше перед функцией Introduce добавлено ключевое слово static, благодаря чему она становится статической. Теперь её можно вызывать прямо из Main без создания экземпляра.


Локальные переменные (Local Variables)

Как и рассмотренные ранее поля экземпляра, локальные переменные хранят данные. Поля экземпляра обычно сохраняют состояние объекта, а локальные переменные предназначены только для временных расчетов.

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

1. Синтаксис объявления локальных переменных
Тип ИмяПеременной = НачальноеЗначение;
  • ИмяПеременной: Пользовательский идентификатор
  • = НачальноеЗначение: Необязательный инициализатор для присвоения начального значения

2. Основные правила локальных переменных

  1. Время жизни и область видимости: Существуют только внутри блока, где объявлены, и во всех вложенных подблоках
    • Переменная создается и становится доступной на строке объявления
    • После завершения выполнения блока переменная утрачивает актуальность и уничтожается
  2. Свободное место объявления: Можно объявлять в любом месте тела метода, но объявление должно предшествовать использованию
    static void Main()
    {
        int age = 3; //Локальная переменная
        Phone p = new Phone(); //Локальная переменная пользовательского типа

        {
            int one = 1; //Локальная переменная подблока
            bool two = false;
        }

        double d = 0;
    }Code language: JavaScript (javascript)
После завершения работы вложенного подблока локальные переменные one и two выгружаются из стека и уничтожаются

Поля экземпляра против Локальных переменных

Поле экземпляраЛокальная переменная
Время жизниСоздается при создании объекта;
уничтожается когда объект недоступен
Активируется на строке объявления;
уничтожается после выполнения родительского блока
Стандартная инициализацияКомпилятор автоматически присваивает стандартное значение для данного типаАвтоматической инициализации нет;
использование без присваивания вызывает ошибку компиляции
Хранение в памятиХранится в куче (Heap), независимо от значимого или ссылочного типаЗначимый тип: стек (Stack);
ссылочный тип: ссылка в стеке, данные объекта в куче

Метод (Method)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *