Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зачёт С#.docx
Скачиваний:
17
Добавлен:
10.12.2018
Размер:
100.55 Кб
Скачать

14.Определение классов в c#. Члены класса. Форма определения класса.

Все C# - программы оформляются в виде класса. Определяя класс, мы определяем данные, которые он содержит, и код, манипулирующий этими данными. Данные содержатся в переменных экземпляров, определяемых классом, а код в методах. Класс определяет также ряд специальных членов. Например, статистические переменные, конструкторы, деструкторы, индексаторы, события, операторы и свойства.

Класс создается с помощью ключевого слова class. Общая форма определения класса, который содержит только переменные экземпляров и методы, имеет следующий вид:

class Имя_класса

{

// Объявление переменных экземпляров

доступ тип переменная 1;

доступ тип переменная 2;

…..

доступ тип переменная n;

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

// Объявление методов

// Свойства, индексаторы

// События

}

Здесь доступ означает спецификатор доступа (public, private, protected, internal и др.), который определяет как к члену класса можно получить доступ:

public (общий, открытый член класса) — обращения к члену класса допускаются из любого кода;

private (закрытый, внутренний член класса) — обращения к члену класса допускаются только из кодов методов класса, в котором он определён. Любые наследники класса уже не смогут получить доступ к этому члену.

По умолчанию (без указания спецификатора доступа) будет установлен доступ private.

protected (защищённый, внутренний член иерархии классов при наследовании) — обращения к члену класса допускаются из кода методов класса, в котором этот член определён, или из любых его классов-наследников;

internal применяется при использовании компоновочных файлов (assembly), доступен для классов сборки;

15.Конструкторы. Парамет­ризованные конструкторы. Создание экземпляра класса. Использование оператора new.

Конструктор – это специальный метод, который инициализирует объект при его создании.

Формат записи конструктора:

доступ Имя_класса(список параметров)

{//тело конструктора }

Характеристики конструкторов:

1) имя конструктора совпадает с именем класса;

2) конструктор не может возвращать значение, даже void (неопределенный тип значения);

3) конструкторы могут быть перегружены (иметь одинаковые имена, но разные списки параметров).

Обычно в качестве модификатора доступа используется public, т.к. конструктор вызывается вне класса. Если вы не создали конструктор, то компилятор C# автоматически предоставляет конструктор по умолчанию, который инициализирует все переменные члены, имеющие числовые типы, нулями, а члены-переменные ссылочного типа (строки, массивы, объекты классов) – null- значениями.

Параметризованные конструкторы. В классе может быть несколько конструкторов, например, конструктор без параметров, конструктор с параметрами (параметризованный конструктор), конструктор-копировщик. Параметризованные конструкторы принимают один или несколько параметров, чтобы инициализировать объект в момент его создания соответствующими значениями. Какой конструктор вызвать компилятор определяет по его сигнатуре (списку параметров).

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

Пример определения класса:

class MyClass

{

double a, b; //Закрытые поля класса

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

public MyClass( )

{

a=b=0;

Console.WriteLine(“Работает конструктор без параметров“);

}

public MyClass( double a, double b)

{

this.a=a;

this.b=b;

Console.WriteLine(“Работает конструктор с параметрами“);

}

public void Show()

{

Console.WriteLine(“a= “+a + “, b= “ +b);

}

}

Создание экземпляров класса. Использование оператора new. Чтобы протестировать конструкторы и методы класса, в Main( ) нужно создать экземпляр (объект) класса. Для этого нужно определить ссылочную переменную класса следующим образом: Имя_класса Имя_переменной = new Имя_класса(…);

Например, MyClass ob1=new MyClass( ); или MyClass ob2=new MyClass(43,73);

Создание экземпляра класса (объекта) происходит в следующей строке MyClass ob1=new MyClass();. Здесь выполняются два действия. Во-первых, объявляется переменная ob1 классового типа MyClass. Но эта переменная не определяет объект, а может лишь ссылаться на него. Во-вторых, рассматриваемое объявление создает новый объект и присваивает переменной ob1 ссылку на этот объект. Оператор new динамически (т. е. во время выполнения программы) выделяет память для объекта и возвращает ссылку на него. Эта ссылка (сохраненная в конкретной переменной ob1) служит адресом объекта в памяти, выделенной для него оператором new. Такое определение объекта называется ранним связыванием.

Можно создать объект и так:

MyClass ob3; // Объявление ссылки на объект.

ob3= new MyClass(); // Выделение памяти для объекта.

После выполнения 1-ой строки переменная ob3 содержит значение null, которое означает, что она не ссылается ни на какой объект. После второй строки будет создан новый объект. Такое определение объекта в два этапа называется поздним связыванием.

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