С#.Классы.Опр-е членов классов.

Члены классов.Классы-сердце кажд. ООЯ.Класс представ-т собой инкапсуляцию данных и методов для их обработки. Класс опр-ся как список своих членов.К членам класса отн-ся его поля(св-ва) и ф-ции(методы).Кажд.члену класса можно установить его область доступа.Область доступа члена класса опр-т участки кода,из кот.к этому члену будет возможно обращаться. Классы в языке C# опр-ся:public-Члены,доступные люб.классу программы;internal-члены, доступные люб.классу в том же модуле программы;internal protected-члены,доступные тек. классу и всем его подклассам в том же модуле программы;protected-члены,досутпные только тек.классу и всем его подклассам;private-члены, доступные только из тек.класса (тип по умолчанию). Поле.Так наз-ся член-переменная,содержащий нек.зн-е.В ООП поля иногда наз-т данными объекта.К полю можно применять несколько модификаторов в зависимости от того, как вы собираетесь его исп-ть.В число модификаторов входят static,readonly и const.Метод.Это реальный код, воздействующий на данные объекта (или поля).Здесь мы сосредоточимся на определении данных класса.Свойства.Их иногда называют «разумными» полями (smart fields), поскольку они на самом деле явл-ся методами,кот.клиенты класса воспринимают как поля.Это обеспечивает клиентам большую степень абстрагирования за счет того,что им не нужно знать,обращаются ли они к полю напрямую или через вызов метода-аксессора.Константы.Как можно предпол-ть, исходя из имени,константа-это поле,зн-е кот.изм-ть нельзя. Индексаторы.Если св-ва-это «разумные» поля,то индексаторы-это «разумные» массивы,так как они позволяют индексировать объекты методами-аксессорами get и set.С помощью индексатора легко проиндексировать объект для установки или пол-я зн-й.События.Событие вызывает исполнение нек.фрагмента кода.События-неотъемлемая часть программ-я для Microsoft Windows.

C#.Классы.Типы конструкторов.

При опр-ии класса имеется возможность задать для объекта нач.зн-е.Спец.метод класса,называемый конструктором,вып-ся каждый раз,когда созд-ся новый объект этого класса. Конструктор–это метод,имя кот.совпадает с именем класса. Конструктор не возвращает никакого зн-я.Конструктор без аргументов наз-ся станд.конструктором или констр-ром по умолчанию.Можно опр-ть несколько конструкторов с разл. наборами аргументов.Возможности инициализации объектов в таком случае расширяются.Конструктор копир-я–констр-р класса с единственным параметром,тип кот.определен как ссылка на тип текущего класса.Конструктор с аргументом,в кот.в качестве аргумента выступает объект того же самого класса,наз-т копирующим,поскольку предполагается,что при его вып-ии созд-ся объект-копия др.объекта.Конструкторы, особенно копирующие,довольно часто вып-ся неявно. Констр-р инициализации.Вызов конструкторов баз.класса и конструкторов для атрибутов класса можно задать явно. Особенно это важно,если есть необх-ть либо исп-ть нестанд. конструкторы,либо присвоить нач.зн-я атрибутам класса. Вызов конструкторов запис-ся после имени конструктора класса после двоеточия.Друг от друга вызовы отделяются запятой.Такой список наз-ся списком инициализации или просто инициализацией.Конструктор преобраз-я.Констр-р, получающий один параметр,опр-т преобраз-е из типа своего класса.Такие преобраз-я неявно прим-ся допол-но к обычн. ариф.преобраз-ям.Параметризованные констр-ры.Параметры вносятся в конструктор точно так же,как в метод:для этого достаточно объявить их внутри круглых скобок после имени конструктора.Статические конструкторы.Конструктор класса можно объявить статическим.Стат. констр-р обычно исп-ся для инициализации атрибутов,кот.примен-ся к классу в целом,а не к конкретному его экземпляру.Стат.констр-р служит для инициализации аспектов класса до создания объектов этого класса. Конструкторы и деструкторы.

Констр-р инициализирует объект при его создании.Он имеет такое же имя,что и сам класс,а синтаксически подобен методу.Однако в опр-ии конструкторов не указ-ся тип возвращаемого зн-я.Формат записи конструктора такой:

доступ имя_класса () {

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

Обычно конструктор исп-ся,чтобы придать переменным экземпляра,определенным в классе,нач.зн-я или вып-ть исх.действия,необходимые для созд-я полностью сформированного объекта.Кроме того,обычно в качестве эл-та доступ исп-ся модификатор доступа public,поскольку констр-ры вызываются вне их класса.Все классы имеют конструкторы независимо от того,определите вы их или нет,поскольку С# автоматически предоставляет конструктор по умолчанию,кот.инициализирует все переменные-члены имеющие тип зн-й,нулями,а переменные-члены ссылочного типа-null-зн-ями.Но если вы определите собств.констр-р,констр-р по умол-ю больше не исп-ся.Параметризованные конструкторы.Параметры вносятся в конструктор точно так же,как в метод:для этого достаточно объявить их внутри круглых скобок после имени конструктора.Статические конструкторы.Конструктор класса можно объявить статическим.Стат. констр-р обычно исп-ся для нициализации атрибутов,кот.примен-ся к классу в целом,а не к конкрет-му его экземпляру.Стат.констр-р служит для инициализации аспектов класса до создания объектов этого класса.Стат. констр-р вызывается автоматически,причем до вызова констр-ра экземпляра.В общем случае static-констр-р будет выполнен до люб.констр-ра экземпляра.Кроме того,static-констр-ры должны быть закрытыми,и их не может вызвать программа.Деструкторы.Ср-ва языка С# позволяют опр-ть метод,кот.должен вызываться непосредственно перед тем,как объект будет окончательно разрушен с-мой сбора мусора. Этот метод наз-ся деструктором,и его можно исп-ть для обеспеч-я гарантии "чистоты" ликвидации объекта.Формат записи деструктора:

~имя_класса() {

// код деструктора }

Очевидно,что эл-т имя_класса здесь означает имя класса. Деструктор объявляется подобно констр-ру за исключением того,что его имени предшествует символ "тильда" (~). Деструктор не возвращает зн-я.Чтобы добавить деструктор в класс,достаточно включить его как член.Он вызывается в момент,предшествующий процессу утилизации объекта.В теле деструктора вы указываете действия, кот.должны быть выполнены перед разрушением объекта.

 

11. C#.Методы.

В типах int,string,Console,DateTime,Math и Random в качестве примеров исп-ия методов можно привести след.предлож-я:

offsetMeeting=meeting.AddHours(offset);

totalMins=int.Parse(Console.ReadLine());

В кажд.случае вызов метода сопровождается скобками даже при отсутствии параметров,как в случае ReadLine().Именно таким способом мы отличаем вызов метода от исп-я св-ва. Общ.форма объявления метода:модификатор_доступа тип_метода идентификатор_метода {параметры) {предложения и объявления переменных

return выр-е //Если тип.метод }

//Параметры

тип идентификатор,тип идентификатор…

Метод объявл-ся с указанием своего типа.В этом плане метод может быть типизированным(с именем нек.типа) или нетипизированным(типа void).Как и все члены,метод может быть закрытым(private) или открытым(public).По умолчанию назначается атрибут private.Методы могут содержать только переменные,но не константы.Если метод типизирован,в нем должно быть хотя бы одно предложение return с выр-ем,рез-т вычисления кот.имеет тот же тип,что и тип самого метода. Нетип.метод может иметь предложения return без выр-й. Переменные в методе не инициализированы и им следует явным образом присвоить зн-я перед их исп-ем.Переменные имеют область видимости,кот.действует только внутри метода;кажд.объявленное в методе имя имеет смысл только внутри этого метода.Тип.методы широко исп-ся в С#;их отличительной чертой явл-ся то,что они возвращают зн-е.Тип.метод обязательно должен сод-ть предложение return, следовательно,перед завершением он создает зн-е.Это треб-е соотв-т правилам его вызова.Вызов метода: идентификатор_метода (список__аргументов).Зн-я аргументов перед-ся параметрам метода;осущ-ся вход в метод,и его предложения вып-ся до конца метода или до предложения return.Нетип.(типа void) методы вызываются, как предложения: они не могут быть частью выр-й.Тип. методы вызываются,как часть выр-я,но их можно также вызывать и как предложения,однако в этом случае их возвращаемое зн-е теряется.В ООП методы исп-ся в нескольких разл.контекстах:ф-ции объекта,структурирование программы,обеспеч-е функц-х возможностей и стат.методы.

Еще одна класс-я методов заключ-ся в разделении всех методов на статические и методы экземпляра.Как и стат. поля,стат.методы объявляются с ключевым словом static и сущ-т для класса только в единственном экземпляре.Эти методы вызываются указанием их имени после имени типа и точки.Методы экземпляра относ-ся к конкретному экземпляру класса;их имена при вызове предваряются именем объекта и точкой.

 

12. Инкапсуляция-обеспеч-е скрытности данных,используемых в каком-либо классе.Модификаторы доступа в С# :public-Член доступен вне опр-я класса и иерархии производных классов; private-Член недоступен за пределами области видимости определяющего его класса,поэтому доступа к этим членам нет даже у производных классов;protected-Член невидим за пределами класса,к нему могут обращаться только производные классы;internal-Член видим только в пределах тек.единицы компиляции.Модификатор доступа internal в плане ограничения доступа явл-ся гибридом public и protected,зависимым от местоположения кода.Если вы не хотите оставить модификатор доступа для дан.члена по умолчанию (private),задайте для него явно модификатор доступа.Этим С# отлич-ся от C++,где член,для кот.явно не указан модификатор доступа,принимает на себя хар-ки видимости,определяемые модификатором доступа,заданным для предыд.члена.Для объявления членов на С# как public (член а)и protected (член d) необх-мо исп-ть след.инстр-цию:

class AccessCSharp
{public int a;
protected int d;}
В рез-те вып-я след.кода на С# член b объявляется как private (по умолчанию):

public DifAccessInCSharp
{public int a;
int b;}