![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Wizard_Memfis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 12.2.2007 Где: г. Донецк, Украин а Репутация: 1 Всего: 4 |
Вот мне ОЧЕНЬ интересно а инфы найти как-то не удалось!
Вот и спрашиваю: ЗАЧЕМ БЫЛА ДОБАВЛЕНА ТАКАЯ ВОЗМОЖНОСТЬ? Я все понимаю, что это класнно и гибко!Но а как же инкапсуляция?Зачем вообще тогда эти private and public??? --------------------
www.binary-studio.com |
|||
|
||||
| zaver |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 204 Регистрация: 15.8.2005 Репутация: нет Всего: 3 |
есть другие варианты работы с интерфейсом сборки или класса, структуру которого ты точно не знаешь? (т.е. кроме Reflection)
|
|||
|
||||
| archeg |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 11 Всего: 27 |
Рефлекшин - это не способ обхода привейт и паблик а способ анализа того чего ты не знаешь. Не было бы рефлекшина - не было бы такой утилиты как Lut Roede`s .NET Reflector. Не было бы поддержки плагинов в программах. Не было бы частой гибкости (взять даже пример с поздним связыванием при разработке прилож, общ с екселем - без рефлекшина такое приложение смогло бы работаь только с конкретной версией екселя). Я уже не говорю про такие вещи как например ремоутинг, где проксиобъект создается с помщью рефлекшина, анализуя удаленный объект. Рефлекшин служит для анлиза кода, и вызова методов сигнатуру которых ты не знаешь - очень мощная штука и считается одной из самых-самых мощных "фишек" .нета. Без рефлекшина сама технология .нет не смогла бы существовать. Это сообщение отредактировал(а) archeg - 22.10.2007, 21:22 -------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Еще два важных момента рефлексии :
- с помощью ее ты можешь расширять синтаксис языка программирования и директив среде выполнения до бесконечности! Хотелось ли тебе, хоть раз, не искать комбинацию ключевых слов, операторов и директив, а просто написать в коде
и т.д. - рефлексия дает возможность декларативного программирования. А это позволяет: а) явно указывать на различия в поведении кода в зависимости от того, в каких условиях этот самый код работает б) за счет анализа этих самого кода и упомянутых условий его работы можно пропускать компиляцию, загрузку в память, выполнение целых модулей, не только фрагментов - т.е. оптимизировать run-time performance. Да, рефлексия - это тормоз для неумелого использования, но и "книга заклинаний" - для специалиста. А по поводу инкапсуляции... рефлексия ее не нарушает. Попробуй с ее помощью получить доступ к private-полю или запретить public... Получится? Но зато рефлексию ты выучишь в любом случае Это сообщение отредактировал(а) tol05 - 22.10.2007, 22:36 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Wizard_Memfis |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 12.2.2007 Где: г. Донецк, Украин а Репутация: 1 Всего: 4 |
Че то я не понял:
А так:
Добавлено через 5 минут и 55 секунд Аналогично для метода:
Это сообщение отредактировал(а) Wizard_Memfis - 23.10.2007, 09:01 --------------------
www.binary-studio.com |
||||||
|
|||||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Я еще вчера понял, что именно зацепят за именно строки...
Я неправильно выразился... Да, получить доступ к значению конечно можно. Я имел в виду изменить не значение, а доступность члена в принципе. Доступность для вызывающего кода или для производных классов. Часто задают вопрос "вот у меня в базовом классе свойство public, как его в производном запретить" Рефлексия не позволяет изменить семантику типа, только узнать ее или узнать и изменить содержание конкретного экземпляра. А о нарушении инкапсуляции можно говорить только рассматривая тип, а не его конкретный экземпляр №225. Короче, прокололся я... Мне минус! -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| Wizard_Memfis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 12.2.2007 Где: г. Донецк, Украин а Репутация: 1 Всего: 4 |
О!Вот теперь понятно!Это я значит неправильно понимал инкапсуляцию( только на объектном уровне!)!
Насчет минуса не знаю, а вот плюс за помощь точно заработал!Тока вот добавить пока не могу! Это сообщение отредактировал(а) Wizard_Memfis - 23.10.2007, 09:28 --------------------
www.binary-studio.com |
|||
|
||||
| tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
ну слава Богу! Значит я все-таки достаточно удачно "соскочил"
-------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
| svintuss |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 9.8.2007 Репутация: нет Всего: нет |
Мне в одном проекте рефлексия очень пригодилась. Проект состоял из кучи сборок, которые компилировал заказчик при помощи скрипта, который он упорно не хотел править. Поэтому сборки всегда компилятся в строго определенном порядке. Получается, что сборки, когторые первыми компилятся не могут содержать референсы на более поздние.
Если класс А из сборки sA нуждается в экземпляре класса В из сборки sB то делаем следующее. Объявляем в сборке sA интерфейс iB, подгоняем его под методы класса В. В сборке sB делаем референс на sA и объявляем класс В как public class B:sA.iB. в классе А создаем объект класса В следующим образом: iB ist = (iB)System.Activator.CreateInstanceFrom("sB.dll","sA.iB").Unwrap(). |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |