Члены и создание объектов

Если заниматься не только общим описанием этой темы, но и показать примеры, то нужно разобраться уже более конкретно: что и из чего состоит. Сейчас мы попробуем поработать уже с чем-то более осязаемым.

В рамках класса мы можем определять различные члены, которые будут являться частью объекта. На самом деле член может быть членом или класса или объекта. Разница в том, что когда член принадлежит всему классу – он доступен без создания объекта и как бы существует глобально. Такие члены называются статическими.

Если член определён в классе и не помечен как статический, то он является членом объекта. И обращаться к нему можно через экземпляр объекта. Нас интересует следующие члены:

  • Поля
  • Методы
  • Конструкторы

Поля

Объект может содержать данные. Совокупность данных – это состояние объекта. Класс описывает что у каждого объекта должны быть определённые данные, а в каждом конкретном объекте свои данные.

Так например мы можем сказать что у нас есть класс Tank описывающий танк в игре. У каждого танка есть скорость хода, которую мы описываем как поле. А каждый объект уже содержит конкретное значение скорости.

Поля – это переменные привязанные к объекту. Правила определения примерно похожи. Соответственно когда мы создаём несколько объектов, мы имеем несколько переменных.

Фрагмент 1.35

class Tank
{
    public int Speed;
}

В коде выше мы определили класс с одним полем Speed. Отличие от обычной переменной в том, что во-первых мы определили её в теле класса а не метода, а во-вторых в том, что мы указали модификатор доступа. Модификаторы доступа – это указание кому доступен этот член.

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

После определения класса мы можем начать создавать объекты.

Фрагмент 1.36

static void Main(string[] args)
{
    Tank tank1 = new Tank();
    Tank tank2 = new Tank();

    tank1.Speed = 10;
    tank2.Speed = 15;
}

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

Фрагмент 1.37

Tank tank1 = new Tank();
Tank tank2 = new Tank();

tank1 = tank2;

tank1.Speed = 10;
tank2.Speed = 15;

Console.WriteLine(tank1.Speed);

В данном случае в консоль выведется 15, так как переменная с типом класса хранит ссылку на объект. В строке “tank1 = tank2;” мы помещаем в переменную tank1 ссылку на объект, которая содержится в переменной tank2. Таким образом при изменении объекта по ссылке из переменной tank2 мы также будем работать с изменённым объектом по ссылке в переменной tank1.

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

Фрагмент 1.38

static void Main(string[] args)
{
    (new Tank()).Speed = 10;
    CreateNewTank().Speed = 10;
}

static Tank CreateNewTank()
{
    return new Tank();
}

Если вы нашли ошибку, пожалуйста выделите её и нажмите Ctrl+Enter.


Leave a Reply

Your email address will not be published. Required fields are marked *