Программирование >>  Программирование с использованием ajax 

1 ... 60 61 62 [ 63 ] 64 65 66 ... 396


Методы

Метод- это термин, которым принято называть представляемую объектом функцию. Методы могут вызываться так же, как и любые другие функции, и тем же самым образом использовать возвращаемые значения и параметры (о функциях более подробно говорилось в главе 6).

Методы применяются для обеспечения доступа к функциональным возможностям объекта. Подобно полям и свойствам, они могут быть общедоступными или приватными и тем самым ограничивать доступ для внешнего кода необходимым образом. Они нередко подразумевают использование состояния обл.екта в своих операциях и имеют доступ к приватным членам, вроде приватных полей, если в том есть необходимость. Например, класс CupOfCof fee может иметь метод AddSugar (), предоставляющий более удобочитаемый синтаксис для увеличения количества сахара, чем установка соответствующего свойства Sugar. В UML-представлении методы вьгутри прямоугольников классов отображаются в третьем разделе, как показано на рис. 8.4.

CupOfCoffee

-нВеапТуре : string -hinstant: bool -i-Milk : bool -HSugar: byte -Description : string

-KAddSugar(in amount: byte) : byte

Puc. 8.4. Отображение методов в UML-представлении класса CupOfCoffee

Синтаксис методов в принципе похож на синтаксис полей и свойств, но только в нем еще отображается возвращаемый тип и параметры методов. Каждый параметр отображается в UML с одним из следующих идентификаторов: in, out или incut. Эти идентификаторы служат для обозначения направления потока данных, причем out и incut, грубо говоря, соответствуют в языке С# применению таких ключевых слов, как cut и ref, о которых рассказывалось в главе 6, а in - поведению, которое применяется в языке С# по умолчанию тогда, когда не используются ни cut, ни ref.

Объектом является все, что угодно

На этом этапе пришла пора внести ясность: объекты, свойства и методы уже встречались в этой книге не раз. На самом деле в языке С# и .NET Framework объектом является все, что угодно. Функция Main () в консольном приложении является методом класса. Каждый из рассмотренных ранее типов переменных является классом. Каждая из продемонстрированных команд, наподобие <стрска>. Length, <стрска>.Тсиррег О и т.д., представляет собой свойство или метод. (Символ точки здесь, по сути, отделяет имя экземпляра объекта от имени свойства или метода.)

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



Жизненный цикл объекта

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

□ Этап конструирования. При создании экземпляра объекта в первый раз он должен инициализироваться. Этот самый процесс инициализации и называется конструированием и выполняется он функцией-конструктором.

□ Этап деструкции. При уничтожении объекта часто должны выполняться какие-то операции по очистке, вроде операции освобождения памяти. За их выполнение отвечает функция-деструктор.

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

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

Все объекты имеют конструктор по умолчанию, который представляет собой не принимающий параметров метод с таким же именем, как у самого класса. Определение класса может также включать несколько методов-конструкторов, принимающих параметры и отличных от конструктора по умолчанию. Такие конструкторы позволяют создавать экземпляр объекта различными способами, например, предоставляя начальные значения для хранимых в объекте данных.

В языке С# конструкторы вызываются с использованием ключевого слова new. Например, создать экземпляр объекта CupOfCof fee с применением конструктора по умолчанию можно было бы следующим образом:

CupOfCoffee myCup = new CupOfCoffee ();

Экземпляры объектов могут также создаваться и с помощью конструкторов не по умолчанию. Например, у класса CupOfCoffee мог бы существовать конструктор не по умолчанию, принимающий параметр для установки во время создания экземпляра типа кофейных зерен:

CupOfCoffee myCup = new CupOfCoffee( Blue Mountain );

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

Некоторые классы не имеют общедоступных конструкторов, что делает невозможным создание их экземпляров внешним кодом (такие классы называются не создаваемыми). Однако, как вскоре будет показано, это не означает их бесполезность.

Деструкторы

Деструкторы используются в .NET Framework для выполнения очистки после удаления объектов. В целом предоставлять код для метода-деструктора не требуется; это делается автоматически. Однако можно предоставлять специфические инструкции, если необходимо, чтобы перед удалением экземпляра объекта выполнялись какие-нибудь важные операции.



Когда переменная выходит за рамки области видимости, например, она может быть и не доступной из кода, но при этом все равно по-прежнему существовать где-то в памяти. Только после выполнения исполняющей средой .NET ее операции по сборке мусора экземпляр уничтожается полностью.

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

Статические члены классов и члены экземпляров классов

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

Например, методы Console. WriteLine () и Convert. ToString (), которые уже демонстрировались ранее в книге, являются статическими. Создавать экземпляры классов Console и Convert для них ни в коем случае не нужно (на самом деле при попытке сделать это, вы обнаружите, что это вообще невозможно, поскольку конструкторы этих классов не являются общедоступными, как описывалось ранее).

Существует еще много подобных ситуаций, в которых статические свойства и методы можно применять с пользой. Например, статическое свойство можно использовать для отслеживания количества созданных экземпляров класса. В UML-синтаксисе статические члены классов изображаются с подчеркиванием, как показано на рис. 8.5.

MyClass

-blnstanceProperty : int +StaticProperty : int

-hlnstanceMethodO : void +StaticMethod(): void

Puc. 8.5. Статические члены в UML-представлении

Статические конструкторы

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



1 ... 60 61 62 [ 63 ] 64 65 66 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.004
При копировании материалов приветствуются ссылки.
Яндекс.Метрика