Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпора теория(полная).doc
Скачиваний:
0
Добавлен:
22.11.2019
Размер:
123.9 Кб
Скачать

Классы. Создание экземпляров класса. Особенности перегрузки конструкторов

Представьте себе, что у вас есть некоторый объект, который характеризуется рядом свойств. Например, работник на некой фирме. У него есть такие свойства, как фамилия, возраст, стаж и т. п. Так вот, в этом случае удобно каждого работника описывать не рядом независимых переменных (строкового типа для фамилии, целого типа для возраста и стажа), а одной переменной типа Worker, внутри которой и содержаться переменные для фамилии, возраста и стажа. Это здесь самое важное - что в переменной типа Worker содержаться другие переменные. Конечно, типа Worker среди встроенных типов данных нет - ну так эта не беда - мы можем ввести его. Это и есть класс.

Главное их отличие от структур состоит в том, что классы

поддерживают отношения наследования между собой. Разновидностью класса являются интерфейсы и делегаты. Первые позволяют реализовать множественное наследование поведения (функциональности), а на основе делегатов программируется реакция систем на внешние (управленческие) воздействия).

Пример объявления класса: class A{};

Операция new выделяет память и вызывает конструктор «по

умолчанию». Как известно, объекты «классных» типов – ссылочные и сами по себе содержат только ссылку.

Конструктор класса «по умолчанию» выполняет инициализацию полей объекта значениями по умолчанию (для числовых – нуль, для ссылочных – нуль-адрес или null).

Пример создания экземпляра класса: A obj = newA();

Конструктор класса «по умолчанию» можно перегрузить и, более того, при определении в классе хотя бы одного явного конструктора, конструктор «по умолчанию» отключается! Класс может иметь неограниченное количество перегруженных конструкторов.

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

using System;

namespace test

{ class SomeClass{

//Первый метод SomeFunc.

public static int SomeFunc()

{ return 0; }

//Второй метод SomeFunc.

public static int SomeFunc(int k)

{ return k*k;}

//Третий метод SomeFunc.

public static float SomeFunc(float k)

{ return k; } }

class Test {static void Main()

{Console.WriteLine(SomeClass.SomeFunc());

Console.WriteLine(SomeClass.SomeFunc(10));

Console.WriteLine(SomeClass.SomeFunc((float)10)); } } }

На экране: 0 100 10.

Классы: особенности инициализации полей, поля const и readonly

Основной элемент класса – это поля. В отличие от структур поля класса могут быть проинициализ. сразу, при объявлении (это выполняется до вызова конструк.):

class A

{int a=1;double b=2;string s="Три";}

Поля класса могут иметь модификаторы const (значения должны быть определены при инициализации, Модификатор const используется для объявления полей или локальных переменных, которые не должны изменяться; Этим переменным необходимо присвоить начальные значения при объявлении. Таким образом, const-переменная является, по сути, константой. ) и readonly. В данном случае значения не обязательно задавать при объявлении, но они должны быть непременно определены в конструкторе, так как сразу после создания экземпляра вступает в действие режим readonly (после этого изменить его содержимое уже нельзя).

namespace Class3

{class A

{const int a=1;

readonly double b;

public A( double с)

{ b = с+a;}

public override string ToString()

{ return String.Format("a={0} b= {1}",a,b); } }

class Program {static void Main()

{ A a = new A(2.5); Console.WriteLine(a.ToString()); } } }

На экране: a=1 b= 3.5

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]