|
Программирование >> Программирование с использованием ajax
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, т.е. определять подобным образом доступные только для чтения или только для записи свойства нельзя. Дополнительные вопросы, касающиеся членов классов Теперь, когда были рассмотрены все основные детали, касающиеся определения членов, пришла пора рассмотреть и более сложные связанные с членами вопросы. Поэтому в этом разделе речь пойдет о следующем. □ Как скрывать методы базового класса. □ Как вызывать переопределенные или скрытые методы базового класса. □ Как создавать вложенные определения типов.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |