Опубликован: 14.12.2009 | Доступ: свободный | Студентов: 29522 / 2925 | Оценка: 4.28 / 4.01 | Длительность: 06:01:00
ISBN: 978-5-9963-0236-9
Специальности: Программист, Преподаватель
Лекция 2:

Учимся общаться с компьютером

< Лекция 1 || Лекция 2: 1234 || Лекция 3 >

Добавление полей в класс

Ранее, когда мы знакомили компьютер с классом животных, то просто дали классу название – Animal, добавили в код фигурные скобки и пообещали рассказать о нем больше, а точнее — сообщить о том, что находится внутри него. Запись выглядела так:

class Animal
{
...
}

А теперь мы готовы добавить несколько полей в определение класса.

class Animal
{
    string kindOfAnimal;
    string name;
    int numberOfLegs;
    int height;
    int length;
    string color;
    bool hasTail;
    bool isMammal;
    bool spellingCorrect;
}

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

Поля и объекты

Итак, мы объяснили компьютеру, что ВСЕ объекты класса Animal имеют перечисленные выше поля. Теперь давайте попросим его создать экземпляр, представляющий определенный объект класса Animal (как мы делали это в предыдущем разделе), и сообщим компьютеру некоторую информацию об этом объекте, присвоив значения каждому полю.

Animal Barsik;
Barsik = new Animal();
Barsik.kindOfAnimal = "Cat";
Barsik.name = "Кот Барсик";
Barsik.numberOfLegs = 4;
Barsik.height = 50;
Barsik.length = 110;
Barsik.color = "Black";
Barsik.hasTail = true;
Barsik.isMammal = true;

Обратите внимание, что в кавычки ("") заключается значение только строковых полей. В конце каждого выражения ставится точка с запятой (;), после чего полученная конструкция становится оператором присваивания.

На данном этапе стоит упомянуть, что выбранное нами имя объекта Barsik не имеет никакого значения для компьютера, который будет работать с объектом, даже если мы заменим имя Barsik на X или любое другое:

Animal X;
X = new Animal();
X.kindOfAnimal = "Cat";
X.height = 50;
X.length = 110;
X.color = "Black";
X.hasTail = true;
X.isMammal = true;
Примечание редактора. То, что компьютер способен обрабатывать любые имена (проблемы не составит даже кот, которого зовут ГЩ12я), не означает, что объекты можно именовать как попало. Имя многое говорит человеку, поэтому крайне важно давать объектам содержательные имена, позволяющие лучше понимать смысл программы.

Еще одно важное замечание. Каждый объект можно рассматривать как коробочку, внутри которой находятся ящички (поля). У двух объектов одного класса коробочки одинаковые, но значения, хранящиеся в ящичках (полях), — разные. Например, два объекта Миша и Гриша имеют поле "Рост", но Миша высокий, а Гриша маленького роста.

Строительный блок: Поля
Обычно в классе присутствует одно поле или несколько полей, которые позволяют описывать определенные черты объектов этого класса.
class SchoolKid
{
string firstName;
string lastName;
int age;
bool isWideAvake;
}

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

Тип Описание Примеры значений
string Строковый тип данных предполагает, что значением поля может быть слово или предложение, состоящее из символов алфавита, цифр, знаков препинания и т.д. "Petr" ("Петя")

"Eight-legged Octopus" ("Восьминогий Осьминог")

"Girls are too clever to fall out of their prams" ("Девочки слишком умные, чтобы выпасть из коляски")

int Числовой тип данных предполагает, что значение поля может быть целым числом.

Название типа – это сокращение от слова "integer"

328

28000

-520

bool Логический тип данных предполагает, что значение поля может быть либо истиной (true), либо ложью (false). Название типа – сокращение от слова "boolean". True — истина

False — ложь

При определении поля в программе необходимо указать его тип и имя:

string lastname;

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

Давая имя полю, можно использовать любое слово, например, VsegdaNacheku – здесь сочетаются заглавные и строчные буквы. Обратите внимание: пробелы ставить нельзя.

При работе с определенным объектом полям присваиваются значения, которые помогают описывать объект. Если, например, у нас есть объект с именем schoolKid (Школьник), то его полям можно было бы присвоить следующие значения:

schoolKid.firstName = "Petr";
schoolKid.age = 13;

Имя объекта и имя поля разделяются точкой (.).

Итак, schoolKid.firstName = "Petr" означает следующее: " Petr становится значением поля firstName ( Имя ) объекта schoolKid ".

Закрытые, защищенные и открытые поля

На первом этапе изучения языка C# этот раздел не столь важен, но в дальнейшем вам могут встречаться слова private, protected и public. Давайте обсудим их смысл.

class Animal
{
    string kindOfAnimal;
    string name;
    int numberOfLegs;
    int height;
    int length;
    string color;
    bool hasTail;
    bool isMammal;
    bool spellingCorrect;
}
class MyTestClass
{
    Animal myAnimal;
}

Объекты одного класса могут быть полями в другом классе. Например, в классе MyTestClass появится поле myAnimal, принадлежащее классу Animal.

При объявлении полей так, как показано выше, мы можем решить, должны ли другие классы иметь к ним доступ. Иногда очень важно делать поля закрытыми ( private ) — для того, например, чтобы другой класс не помещал неверные значения в поля и не нарушал работу программы. Использование полей private, protected и public определяет степень защиты объектов класса.


На рисунке изображены дети, живущие в одной семье. Обратите внимание на то, как обеспечивается безопасность каждого из них. Малютка Света закрыта ( private ) в комнате — ее не выпускают из дома, и она имеет наиболее высокий уровень защиты. С ней могут общаться люди, обладающие наибольшим доверием. Борису разрешается находиться как на переднем, так и на заднем дворе, но он по-прежнему в некоторой степени защищен ( protected ). Толя, старший ребенок, является открытым ( public ) для других, и любой желающий может общаться с ним.

Итак, в начало описания поля мы можем добавить еще одно слово:

class Animal
{
    public string kindOfAnimal;
    public string name;
    public int numberOfLegs;
    public int height;
    public int length;
    public string color;
    bool hasTail;
    protected bool isMammal;
    private bool spellingCorrect;
}

Вы можете поинтересоваться: а что произойдет, если мы не станем включать эти слова? В таком случае по умолчанию задается значение private и компьютер воспринимает код, как если бы в начале объявления было написано слово private. Поэтому в последнем примере поле hasTail автоматически становится закрытым ( private ).

Давайте уточним значения этих слов:

  • Private – "объекты только этого класса могут обращаться к данному полю".
  • Public – "объекты любого класса могут обращаться к этому полю".
  • Protected – "только объекты классов-наследников могут обращаться к полю". Если построен класс Animal, то другой класс, например, класс Mammal (Млекопитающее), может объявить себя наследником класса Animal.

Следующие примеры двух классов демонстрируют описанный принцип полей public и private. Поля типа protected мы оставим без обсуждения, а сведения о них можно найти в справке Visual C# Express.

Как и ранее, сначала мы определяем несколько закрытых и открытых полей в классе Animal и затем пытаемся обратиться к ним из класса Zoo.

class Animal
{
    public string kindOfAnimal;
    public string name;
    public int numberOfLegs;
    public int height;
    public int length;
    public string color;
    bool hasTail;
    protected bool isMammal;
    private bool spellingCorrect;
}
class Zoo
{
    Animal a = new Animal ();
        // Следующая строка будет выполнена успешно, поскольку классу "Zoo"
        // разрешено обращаться к открытым полям в классе "Animal"
    a.kindOfAnimal = "Kangaroo";
        // Обе следующие строки НЕ будут выполнены, поскольку классу "Zoo"
        // не разрешено обращаться к закрытым или защищенным полям
    a.isMammal = false; // Попытка обращения к защищенному методу
    a.spellingCorrect = true; // Попытка обращения к закрытому свойству класса
}
< Лекция 1 || Лекция 2: 1234 || Лекция 3 >
Алексей Фролов
Алексей Фролов
Кристина Горбунова
Кристина Горбунова