Урок по C# № 16 – «Знакомимся с методами класса. Часть 1»


Вообще, в широком смысле слова метод – это подпрограмма, выполняющая какую-то задачу в рамках своего класса. Например, мы хотим присвоить нашему объекту имя «Эксперимент».  Вы наверняка бы начали писать так: присвоить полю имя значение «Эксперимент» Всего одна строчка кода, скажете вы и непонимающе будете читать дальше, силясь понять, зачем нужны методы. Хорошо, а если нам нужно присвоить полю Возраст нужное значение? Вдруг какой то умник напишет значение -1000 лет? Кроме того, мы бы хотели занести наш объект в базу данных.  И таких действий в рамках одного метода может быть множество. Чтобы понять, что я написал, проще рассмотреть пример. Итак, давайте напишем метод, который присвоит имя соответствующему полю. Как вы помните, у нас есть класс Человек:

 class Человек { int вес; int рост; char пол; int возраст; string Имя; } 

Мы хотим присвоить нашему объекту имя. Вообще, подобные действия лучше делать с помощью так называемых конструкторов, но вы не поймете их механизм не разобравшись с методами. Для наших целей напишем метод setName ().

Синтаксис методов в C# достаточно прост:

модификатор_доступа возвращаемое_значение Имя_метода (параметры если есть)

{действия;

}

В нашем случае мы напишем так:

class Человек {
int вес;
int рост;
char пол;
int возраст;
string Имя;
public void setName ()
{
Имя= "Эксперимент";
}
}

Здесь вас наверняка смутит ключевое слово void. Оно означает, что метод ничего не возвращает. Это как процедура в других языках. Так как метод устанавливает некое значение, то он будет является сеттером и начинаться с префикса set. В теле метода я присвоил полю Имя  нужное значение. Но вот тут есть одно но. Все объекты этого класса будут содержать данное имя, что нам ни к чему. Получается, что наша задача не выполнена? Да, это так. Мы потеряли гибкость.  Проверьте сами:

Человек человек1 =new Человек ();
человек1.setName (); //здесь мы присвоим значению. без вызова этого метода там ничего нет.

Если вы создадите объект человек2 и т.д., у всех будет тоже самое.  Кстати, обратили внимание на то, как вызывается метод? Его сигнатура проста – имя_объекта.имя_метода(). Хотите еще один момент? В методе я допустил вольность, опустив ключевое слово this. Оно означает, что поле принадлежит этому классу.

this.Имя.

 

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

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

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

Например, в нашем случае мы будем писать так:

class Человек {
int вес;
int рост;
char пол;
int возраст;
string Имя;
public void setName (string n)
{
Имя= n;
}

Обратили внимание на удобство? Мы указали, что присвоим полю Имя любое строковое значение, что передадим в параметре. Теперь мы в коде можем писать так:

человек.setName (“Владимир”);
человек2.setName (“Кто-то там”);

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

Console.WriteLine (“Введите имя”);
string name=Console.ReadLine();
человек.setName (name);

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

На этом пока вводный урок по методам закончен. Продолжение будет в другой части.

<<Предыдущий урок

Яндекс.Метрика