Классы

April 7, 2010 by admin Комментировать »

Классы — это «сердце» любого приложения в объектно-ориентированном языке. Данная глава состоит из нескольких разделов. В первом разделе описаны некоторые часто используемые концепции C#. Материал последующих разделов встречается на практике несколько реже (в зависимости от того, какие программы вы пишете).

Простой класс

Очень простой класс C# может выглядеть так:

class VerySimple

{

int simpleValue = 0;

}

class Test

{

public static void Main()

{

VerySimple vs = new VerySimple();

}

}

Класс VerySimple выполняет функции контейнера для одного целого числа. Поскольку целая переменная объявлена без указания класса доступа, она является закрытой (private) для класса VerySimple, и ссылки на нее за пределами класса невозможны. Для явного объявления этого класса доступа используется модификатор private.

Целая переменная simpleValue является членом класса; членами класса могут быть переменные самых разных типов.

В функции Main() система создает экземпляр класса в куче (heap) и возвращает ссылку на него. Ссылка (reference) используется для обращения к созданному экземпляру[1].

Когда экземпляр становится ненужным, нет необходимости явно сообщать об этом. В предыдущем примере ссылка перестает существовать с завершением функции Main(). Если ссылка не была сохранена в другом месте, экземпляр становится доступным для уничтожения сборщиком мусора. При необходимости сборщик мусора[2] освобождает выделенную память.

Все это, конечно, хорошо, но наш класс не приносит никакой пользы, поскольку целая переменная недоступна извне. Рассмотрим более реальный пример:

using System;

class Point

{

// Конструктор

public Point(int x, int y)

{

this.x = x;

this.y = y;

}

// Переменные класса

public int x;

public int y;

}

class Test

{

public static void Main()

{

Point myPoint = new Point(10, 15);

Console.WriteLine(“myPoint.x {0}”, myPoint.x);

Console.WriteLine(“myPoint.y {0}”, myPoint.y);

}

}

В этом примере определяется класс с именем Point, содержащий две целые переменные x и y. Переменные объявлены открытыми (public); это означает, что они доступны для программного кода за пределами класса.

В дополнение к переменным класс содержит конструктор — специальную функцию, предназначенную для конструирования экземпляров данного класса. При вызове конструктор получает два целых параметра.

В приведенном примере в конструкторе используется специальная переменная this. Эта переменная доступна во всех функциях класса и всегда ссылается на текущий экземпляр.

В функциях класса компилятор ищет имена среди локальных переменных и параметров, прежде чем переходить к поиску среди членов экземпляра. Для ссылок на переменную класса, имя которой совпадает с именем параметра, используется синтаксис this.<имя>.

В приведенном примере обозначение x относится к параметру x, а this.x относится к переменной класса с именем x.

Кроме класса Point, в примере присутствует класс Test. В этом классе содержится функция Main, вызываемая при запуске программы. Функция Main создает экземпляр класса Point — сначала она выделяет память для объекта, а затем вызывает конструктор класса. Конструктор присваивает значения переменным класса x и y.

Остальные строки функции Main() выводят значения x и y.

В этом примере мы напрямую обращаемся к переменным класса. Обычно поступать подобным образом не рекомендуется. Пользователи класса начинают зависеть от имен переменных, что усложняет возможную модификацию класса в будущем.


[1] Для читателей, привыкших работать с указателями: ссылка представляет собой указатель, для которого поддерживаются только операции присваивания и разыменования.

[2] Сборщик мусора, используемый в .NET Runtime, более подробно рассматривается в главе 31.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты