Урок по C# № 15 – «Члены (поля) класса»


В прошлом уроке мы с вами разобрали, что класс – это шаблон. А объект – это уже реализация данного шаблона. Также мы создали класс Human, на котором и будем изучать ООП.

Класс – это всего лишь каркас. И для нормального функционирования будущего объекта на его основе необходимо правильно продумать этот каркас.

Итак, у нас есть класс Human (человек). Что должен делать этот класс? Да практически все, что характерно живому человеку.

Человек обладает общими характеристиками типа веса, роста, телосложения, цвета волос, глаз, пола и т.д. Это и будут поля класса (часто вы можете также слышать термин члены класса). Я сознательно привел в качестве наглядного примера человека, чтобы вы изучали ООП сначала не на абстракции, как любят преподносить его некоторые авторы, а на вполне понятном примере. Тем не менее, нужно готовиться к тому, что часто классы будут как составлятся именно как некая абстрактная сущность, но об этом мы поговорим позже.

Итак, мы уже выбрали, какими характеристиками будет обладать наш объект класса Human. Давайте это будет вес, рост, пол, возраст и имя. Чтобы проще было вам читать, я буду давать имена в Unicode (т.е. они будут кириллическими). Вы же вольны поступать так, как вам угодно.

Итак, откройте ваш класс Human и добавьте в любое место после фигурных скобок наши характеристики. Я сделал это так:

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

Мы заполнили наш класс полями. Теперь можно создавать его экземляр. Кстати, я в этом коде нарочно сделал ошибку, которая помешает нам осуществить задуманное в дальнейшем. Если вы внимательно читали предыдущие два урока, то должны сами найти. Я объясню, где ошибка чуть дальше, но для вашего мозга будет полезнее сделать это самим.

Создадим экземпляр класса Human (по молчанию я подразумеваю, что вы создадите этот экземпляр в основной программе в методе Main ()):

Human человек1=new Human ();
человек1.имя= "Влад";

Если вас не смутил тот факт, что IDE не предложила варианты полей после точки, можете попробовать скомпилировать. Удивлены, что не получилось? Как вы думаете, почему так происходит?

А причина как раз в пресловутых модификаторах доступа. Как вы помните, их несколько, но самые распространенные это public и private. Так вот, в C# все члены и методы класса имеют тип по умолчанию как private (закрытый). Это означает, что ничто, даже экземпляр класса не сможет обратиться напрямую к закрытым членам. Это может только делать другие члены этого класса.

Что же нам делать, если нужно все же задать некоторые свойства? Наверняка вам придет в голову поменять модификатор на public. Что ж, давайте сделаем это:

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

Теперь наш предыдущий код спокойно скомпилируется. Можете добавить все характеристики и посмотреть, что будет. Как вариант, добавьте строку вывода имени через Console.WriteLine ().

Кстати, обратите внимание, что C# на автомате все же присвоит всем переменным значение по умолчанию. Это сделано для того, чтобы не вызывать ошибок. Подробнее мы поговорим об этом, когда будем изучать Конструкторы и Деструкторы.

Вы можете создать несколько объектов и радоваться проделанной работе. Однако как вы думаете, зачем были введены модификаторы доступа?

Рассмотрим на примере. Допустим вы создаете объект, подразумевая реального спортсмена Бориса.  Допустим, вы хотите сделать его боксером-тяжеловесом и даете ему вес в 100 кг. Ваш объект задумывался как игровой персонаж  в боксе. Все вроде бы ничего, однако кто-то из ваших коллег-программистов решил дать этому боксеру вес в 70 кг. Как вы думаете, что будет с этим игровым персонажем, если его кинуть на ринг против 100 килограммового боксера?

Именно поэтому члены класса и закрывают по умолчанию. Запомните, поля должны иметь модификатор private.

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

<<Предыдущий урок                                                              Следующий урок>>

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