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

1 ... 79 80 81 [ 82 ] 83 84 85 ... 396


MrMelhod Mftrod

□ О...В tr.

Асе* я NliM

I MK< CuitomMMbults

InPtritince Mod ri f

Stittc

S (Ml Гнимг1<ии Remirti

SuPnmtfy

public

MyMtthod

double

Fllit

Pwc. 70.5. Окно Properties для нового метода

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

Добавление свойств

Добавление свойств осуществляется во многом аналогично. На рис. 10.6 показано новое свойство, добавленное в окне Class Details.

. ♦ MyMtthod . ♦ ToStnng

double Itrtnu

HIdt

рспм

fMMi

f intv i

♦ N me

Puc. 10.6. Добавление нового свойства

Оно приведет к добавлению в класс такого кода:

public int Mylnt {

get {

throw new System.NotImplementedException0;

Вам останется самостоятельно ввести лишь реализацию, а именно - отобразить данное свойство на поле, удалить блок set или get при желании сделать свойство доступным только для чтения или только для записи либо применить к ним модификаторы доступности. Базовая структура, однако, будет предоставлена автоматически.



Добавление полей

Добавление полей выполняется так же легко. Нужно просто ввести имя поля, выбрать модификатор типа и доступа и все, базовая структура для продолжения готова.

Рефакторизация членов

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

Возможности рефакшоризации, предлагаемые в VCE, являются очень ограниченными и, к сожалению, не включают описываемой здесь возможности инкапсуляции полей. В этом отношении в VS имеется гораздо больше опций, чем в VCE.

Например, если бы в классе MyClass присутствовало поле

public string myString;

тогда на нем можно было бы щелкнуть правой кнопкой мыши и выбрать в контекстном меню Refactor=>Encapsulate Field (Рефакторизация =>Инкапсулировать поле). Это привело бы к отображению на экране диалогового окна Encapsulate Field (Инкапсуляция поля), показанного на рис. 10.7.

EncapeuUte FMd

Fifid namf myString

Property name:

Updete references: # E)(tefnai All

ffj Preview reference changes П Search In commenti Pl Search in strings

Puc. 10.7. Диалоговое окно Encapsulate Field

Принятие предлагаемых по умолчанию опций в этом окне завершилось бы изменением кода в классе MyClass следующим образом:

private string myString; public string MyString {

get {

return myString;

set {

myString = value;



Здесь уровень доступности поля myString был изменен на private, а общедоступное свойство с именем MyString - создано и автоматически связано с полем myString. Очевидно, что сокращение времени, уходящего на монотонное создание свойств для полей, является большим плюсом.

Автоматические свойства

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

Рефакторизация несомненно ускоряет дело в том, что касается ввода кода, но в С# есть еще одно припрятанное средство: автоматические свойства. Автоматическое свойство объявляется с помощью упрощенного синтаксиса, и компилятор С# заполняет все пробелы автоматически. В частности, компилятор объявляет приватное (private) поле, которое применяется для хранения, и использует его в блоках get и set внутри свойства, позволяя не беспокоиться о деталях.

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

public int MylntProp {

get; set;

Уровень доступности, тип и имя свойства определяются обычным образом, а вот реализации для блоков get и set внутри него не предоставляются. Реализации этих блоков (и лежащего в основе поля) генерируются самим компилятором.

В случае применения автоматического свойства доступ к данным возможен только через это свойство, поскольку получать доступ к лежащему в основе приватному полю, не зная его имени (ведь оно будет определяться только во время компиляции), не получится. Однако назвать это ограничением нельзя, поскольку использование непосредственно имени самого свойства является вполне приемлемым вариантом. Единственное настоящее ограничение автоматических свойств состоит в том, что они обязательно должны включать и блок get, и блок set, т.е. определять подобным образом доступные только для чтения или только для записи свойства нельзя.

Дополнительные вопросы, касающиеся членов классов

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

□ Как скрывать методы базового класса.

□ Как вызывать переопределенные или скрытые методы базового класса.

□ Как создавать вложенные определения типов.



1 ... 79 80 81 [ 82 ] 83 84 85 ... 396

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