Найти в Дзене
"Мы"-Прогер

Изучаем C# - Что такое методы в классах

В прошлой статье "Классы как составные типы данных" - https://dzen.ru/a/aXjruZrLtAUxqw3e?share_to=link - мы научились делать классы и поля в них. Теперь рассмотрим методы. На самом деле, все типы данных в C# так или иначе - составные, то есть, внутри них что-то есть. Кроме классов, в C# есть ещё структуры, записи record и прочее. Сейчас нам это неважно. Важно лишь понять, что все они содержат что-то внутри себя. Например, все строки (тип данных string) содержат внутри себя поле Length - числовую длину, и мы можем получить её через точку, как мы делали это в предыдущей статье: Если поля - это переменные внутри объектов, то методы - это действия, которые можно совершить над этими объектами. Как и поля, методы пишутся через точку, но, в отличие от полей, у методов есть круглые скобки, которые позволяют понять, что это метод, а не поле. Например, у той же строки есть методы ToUpper() - "сделать в верхнем регистре", и ToLower() - "сделать в нижнем регистре": Эти методы создают новую строку,
Оглавление

В прошлой статье "Классы как составные типы данных" - https://dzen.ru/a/aXjruZrLtAUxqw3e?share_to=link - мы научились делать классы и поля в них. Теперь рассмотрим методы.

Что такое методы класса?

На самом деле, все типы данных в C# так или иначе - составные, то есть, внутри них что-то есть. Кроме классов, в C# есть ещё структуры, записи record и прочее. Сейчас нам это неважно. Важно лишь понять, что все они содержат что-то внутри себя. Например, все строки (тип данных string) содержат внутри себя поле Length - числовую длину, и мы можем получить её через точку, как мы делали это в предыдущей статье:

Если поля - это переменные внутри объектов, то методы - это действия, которые можно совершить над этими объектами. Как и поля, методы пишутся через точку, но, в отличие от полей, у методов есть круглые скобки, которые позволяют понять, что это метод, а не поле. Например, у той же строки есть методы ToUpper() - "сделать в верхнем регистре", и ToLower() - "сделать в нижнем регистре":

-2

Эти методы создают новую строку, которая будет равна данной строке, только все буквы в ней будут большими/маленькими. Новые строки кладутся в новые переменные, хотя делать это необязательно:

-3

Здесь ToUpper() выдаёт в ответ (говорят "возвращает") новую строку. То есть, если мысленно заменить ToUpper() (обведённое красной рамкой) на его результат, то получится строка. А значит, у неё есть ToLower():

-4

В свою очередь, ToLower() возвращает в ответ тоже строку (обведено жёлтой рамкой). А значит, её можно распечатать в Console.WriteLine():

-5

Задание: распечатайте длину последней строки.

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

Методы могут зависеть от параметров, то есть получать на вход какие-то вспомогательные данные. Например, метод Substring() вырезает из строки подстроку, и он должен знать номер начального символа и длину вырезаемого куска. Входные параметры пишутся в круглых скобках через запятую:

-6

В подсказке серым текстом приписываются названия параметров: первый называется startIndex (номер начального символа), а второй - length (длина). Нумерация в строках и вообще везде в программировании начинается не с 1, а с 0! Задание: поймите, какую подстроку мы вырезали из строки "Какой-то текст 123"?

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

В C# и других си-подобных языках может существовать несколько методов с одинаковым названием. Они отличаются количеством или типом входных параметров. Такие методы называются перегрузками.

Например, у Substring() есть две перегрузки:

-7

Увидеть перегрузки можно во время набора кода, где мы вызываем метод, или же после этого, поставив каретку внутрь скобок и нажав Ctrl + P в Rider (от слова Parameters). Первая перегрузка не принимает на вход длину length, а только начальный номер подстроки startIndex. Соответственно, не зная длину подстроки, она вырезает кусок до самого конца строки. Вторая же перегрузка вырезает кусок указанной длины.

Как вы уже могли догадаться, Console.WriteLine() - тоже метод, раз его вызов имеет круглые скобки. У него тоже есть несколько перегрузок, и отличаются они не количеством входных параметров, а их типами:

-8

Сделайте сохранение в Git под названием "Методы".

Цепочки вызовов методов

Итак, мы можем взять строку myStringAsObject, выделить из неё подстроку с помощью метода Substring(), у полученной строки сделать все буквы крупными с помощью метода Upper(), а у той строки взять длину с помощью поля Length:

-9

Важно понять, что каждый вызов метода можно мысленно заменить на его результат. То есть, обведённое красной рамкой - это подстрока, жёлтой рамкой - это та подстрока с крупными буквами, а зелёной рамкой - это число (длина той подстроки с крупными буквами):

-10

Далее мы можем прибавить что-нибудь к этому числу или сравнить его с 0 в условии if, например:

-11
-12

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

Задание

Напишите цепочку команд через точки:

  1. Вырежьте из строки, хранящейся в переменной myStringAsObject, подстроку с 8-го по 14-й символы включительно. Рассчитайте длину подстроки с помощью арифметических действий прямо в месте вызова метода.
  2. Используя всплывающую подсказку или интернет, найдите метод, который обрезает пробелы по краям строки, и вызовите его у подстроки. Подсказка появляется в момент набора точки.
  3. Аналогично, замените все символы 'т' на 'К' у результата;
  4. Затем припишите к его началу "Ответ: ";
  5. Распечатайте результат.

Сделайте сохранение в Git, назвав его "Методы - Цепочки методов".

Далее

Пока что мы не будем изучать, как делать собственные методы, потому что это довольно сложно. Это будет в статье "Пишем методы и конструкторы сами". А пока что учитесь использовать методы встроенных в C# классов.

Конструкторы, статические поля и методы - https://dzen.ru/a/aYIv6e1b7EvwzeX4?share_to=link

Оглавление - https://dzen.ru/a/aXisxwt_Mnz2qTjs?share_to=link