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


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

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

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

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

class Program
{
    static void Main(string[] args)
    {

    }
}

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

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

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

//Заголовок метода
static void Main(string[] args)
{
    //Тело метода
}

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

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

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

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

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

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

/*Этот метод принимает два целых числа и
*возвращает их сумму*/
static int Sum(int aFirstArg, int aSecondArg)

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

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

/*Этот метод принимает два целых числа и
*возвращает их сумму*/
static int Sum(int aFirstArg, int aSecondArg)
{
    return aFirstArg + aSecondArg;
}

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

static void Main(string[] args)
{
    //Вызов метода Sum с фактическими параметрами
    int result = Sum(24, 6);

    //Вывод результата в консоль
    Console.WriteLine(result);
}

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

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

class Program
{
    /*
    * Данный метод выводит пользователю приглашение,
    * указанное в аргументе anOutputStr, получает введенную
    * с клавиатуры строку, преобразует её в целое число и
    * возвращает это число
    */
    static int GetNumber(string anOutputStr)
    {
        //Вывод приглашения пользователю
        Console.Write(anOutputStr);
    
        //Получение строки
        string tmpString = Console.ReadLine();

        //Преобразование строки в число
        int tmpArg = Convert.ToInt32(tmpString);

        return tmpArg;
    }

    static void Main(string[] args)
    {
        //Потенциально опасный блок
        try
        {
            //Первый вызов метода (получение первого числа)
            int firstArg = GetNumber("Введите первое число и нажмите клавишу Enter: ");

            //Второй вызов метода (получение второго числа)
            int secondArg = GetNumber("Введите второе число и нажмите клавишу Enter: ");

            //Сложение двух переменных
            int result = firstArg + secondArg;

            //Вывод результата
            Console.WriteLine("Результат сложения введенных чисел: " + result.ToString());
        }
        //Блок обработки ошибок, SystemException - самый общий тип ошибок
        catch (SystemException)
        {
             Console.WriteLine("Во время выполнения программы произошла ошибка, вероятно, были введены некорректные данные!");
        }
    }
}

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

Перейти к следующему уроку