Шаг 82.
Язык программирования C#. Начала
Знакомство с классами и объектами. Использование объектов (окончание)

    На этом шаге мы рассмотрим еще один пример использования объектов.

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace pr82_1
{
    // Описание класса: 
    class  MyClass {
        // Целочисленное поле: 
        public int number;
        // Метод для отображения значения поля: 
        public void show() {
            Console.WriteLine("Значение поля: " + number);
        }
    }

    // Класс с главным методом:
    class Program
    {
        static void Main()
        {
            // Объектные переменные:
            MyClass A, B;
            // Создание объекта:
            A = new MyClass();
            // Присваивание объектных переменных: 
            B = A;
            // Присваивание значения полю через первую 
            // объектную переменную:
            A.number = 123;
            // Вызов метода через вторую объектную переменную:
            B.show();
            // Присваивание значения полю через вторую 
            // объектную переменную:
            B.number = 321;
            // Вызов метода через первую объектную переменную:
            A.show();
            // Задержка:
            Console.ReadLine();
        }
    }
}
Архив проекта можно взять здесь.

    Результат выполнения программы такой.


Рис.1. Результат выполнения программы

    В данной программе мы немного упростили класс MyClass: теперь у класса всего одно целочисленное поле number. Метод show() при вызове отображает в консольном окне значение поля number объекта, из которого он вызывается.

    В главном методе программы мы объявляем две объектные переменные А и В класса MyClass

 MyClass A, B;        .

    Но объект создается только один: командой

  A = new MyClass();
ссылка на созданный объект записывается в переменную А. Затем командой
  В = А;
переменной В присваивается значение переменной А. Это важный момент: мы новый объект не создаем. Переменной В присваивается переменная А, которая уже ссылается на ранее созданный объект. Что же происходит в этом случае? Чтобы получить ответ на вопрос, следует учесть, что фактическим значением переменной А является не объект, а ссылка на объект. Мы можем эту ситуацию интерпретировать так, как если бы в переменную А был записан некий адрес объекта, на который ссылается переменная. Если так, то при выполнении команды
  В = А;
в переменную В записывается адрес, который записан в переменную А. В итоге и переменная А, и переменная В содержат адрес одного и того же объекта. Это означает, что обе переменные ссылаются на один и тот же объект. Поэтому когда командой
A.number = 123;
мы присваиваем значение полю number через переменную А, а затем вызываем метод show() через переменную В
  B.show();       ,
то в обоих случаях речь идет об одном и том же объекте. Аналогично, если изменить значение поля number с помощью команды
  B.number = 321;          , 
то при вызове метода show() через переменную А
  A.show();
в консольном окне отобразится новое значение поля.

    На следующем шаге мы рассмотрим закрытые члены класса и перегрузку методов.




Предыдущий шаг Содержание Следующий шаг