Залепа №11. Зазеркалье отдыхает.

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

Цитата:

Джеф Просиз "Programming Microsoft .NET"

Термин "отражение" (reflection) означает просмотр метаданных для получения информации о сборке, модуле или типе. .NET Framework использует отражение во время выполнения, чтобы получить важные сведения о загружаемых сборках. Именно применяя отражение Visual Studio NET получает данные IntelliSense.

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

Что ж, здорово, когда можно получать данные непосредственно из скомпилированного модуля - информация окажется всегда актуальной, вне зависимости от версии этого самого модуля. Это было бы очень ценной возможностью, если бы... если бы оно работало!

Сразу скажу, из собственных программ механизм отражений я не тестировал. Мне хватило поведения Visual Studio. Итак...

Контрол TreeView (ох и глюкавый же он!), судя по описанию в MSDN имеет свойство Sorted. И он таки действительно его имеет. Более того, свойство это работает и даже полезным бывает. Для проверки существования можно создать простенькое приложение из одной формы с контролом TreeView на ней. В обработчик Load формы впишем что-нить типа MyTreeView.Sorted = true; и попробуем откомпилировать - все пройдет на ура.

Получается, что свойство все таки существует, хотя IntelliSense и окно Properties пытаются убедить нас в обратном. Кстати, как и просмотрщик объектов Object Browser (встроенный в Visual Studio 2005 вместо программы Class View, которая поставлялась с Visual Studio 2003), а уж он-то точно инфу тянет через отражение.

Выходит, что механизм отражений сбоит даже в среде разработки. А что же он будет творить в вашей реальной программе и к чему это может привести, думайте сами.

PS.

Это не единственное свойство, на котором спотыкается IntelliSense. Ранее я уже писал о свойстве AutoGenerateColumns контрола DataGridView, которое тоже является призраком, невидимым для IntelliSense. Теперь, видимо, настала пора собирать коллекцию таких невидимок. Если найду еще (а я уверен, что найду и не мало!), то буду дополнять список прямо в этой статье.

Дополнение (20:04)

По поводу свойства Sorted и метода Sort в контроле TreeView. В MSDN ни слова не сказано, что они как-то взаимосвязаны. Однако, как я только что убедился на практике, связь эта существует и она достаточно жесткая.

Итак, если свойство Sorted установлено в true, то метод Sort вызывается автоматически после каждого изменения в контроле.

Метод Sort в свою очередь автоматически устанавливает свойство Sorted в true, хотя об этом в MSDN не упоминается.

Вот такая вот загадочная контора microsoft....



Адрес заметки: http://fit-media.com/post_1202747053.html


Если вы не можете отправить комментарий, то прочтите как это исправить здесь

Обязательные для заполнения поля помечены карандашом.


Ваш комментарий к статье:
cod

email при указании не будет опубликован.
Адреса с http:// преобразуются в ссылки автоматически.
Для этого отделяйте их от текста ПРОБЕЛАМИ с обеих концов.
Теги запрещены.

Этот сайт полностью окупает себя, хотя его ТИЦ=10, а PR=2. Хотите знать, как он это делает? Хотите чтобы Ваш сайт чарез пол-часа тоже начал на полном автопилоте приносить деньги?
Регистрируйся здесь и здесь и начинай получать деньги со своего сайта!