Залепа №11. Зазеркалье отдыхает.
Автор будет очень признателен, если Вы кликнете по одной из белых ссылок выше.
Вам это ничего не стоит, а автору сайта будет приятно ;)
В .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....
