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