![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| 0leg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
У многих классов NET есть свойство Parent, доступное только для чтения. Как родительские классы записывают в него значение?
Хочу сделать также! Ни конструкторов ни методов для установки Parent я не нашел. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
0leg, какие именно классы тебя интересуют
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
По косвенным признакам догадываюсь, что речь идёт об ASP.NET ? Я прав? Свойство Parent -- это всего лишь следствие, а делать надо так Пусть ctrlParent -- "родитель" в иерархии контролов ctrlChild -- "потомок" в иерархии контролов тогда просто делаем ctrlParent.Controls.Add(ctrlChild); и всё Это сообщение отредактировал(а) Дрон - 5.12.2006, 16:39 -------------------- Да. Именно так. |
|||
|
||||
| 0leg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
||||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
не знаю... смотря где...
если вдруг не ошибся именем свойства с указателем на родителя(руки тянулись набить parentNode |
|||
|
||||
| 0leg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
||||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: нет Всего: 260 |
Раз речь про ASP.NET, сорри заоффтоп
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Модератор: Если ты считаешь, что здесь кому-либо нравится угадывать твои мысли, то ты ошибаешься. Если это не ASP.NET, то сформулируй вопрос так, чтобы на него можно было нормально ответить. Это сообщение отредактировал(а) Дрон - 5.12.2006, 16:46 -------------------- Да. Именно так. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Ты прикалываться пришел?
Свойство Parent можно сделать internal для записи |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
0leg, ну если так уж надо, добавляйте в любой класс свойство Parent, а заполняйте его в конструкторе. Например:
-------------------- ![]() |
|||
|
||||
| 0leg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
Спасибо. Речь была именно об этом. Не знал, что аксессоры в C# 2005 можно делать с модификаторами доступа. Сейчас с трудом нашел об этом пару строчек у Троелсена. Как-то скудно этот вопрос освещен. В msdn наверняка всё описано, просто не знал в какой стороне искать. На всякий случай сформулирую вопрос четче: ---- Есть объект-родитель (можно назвать "объект-контейнер"), он содержит динамический список других объектов - дочерних. Дочерние объекты создаются родительским объектом, например методом Add. У каждого дочернего объекта есть свойство Parent, содержащее ссылку на объект-родитель. Типичный пример: класс TreeView содержит дочерние объекты класса TreeNode. Объекты TreeNode добавляются в TreeView методом TreeNode TreeView.Add(...). Созданные таким образом объекты имеют в свойстве Parent ссылку на объект-родитель. Но свойство Parent доступно только для чтения. Вопрос: каким образом TreeView устанавливает значение свойству TreeNode.Parent, если это свойство не доступно для записи ? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Очень интересная задача, на самом деле. И решается не так тривиально, как это может показаться на первый взгляд. Всё дело в "волшебных пузырьках", то есть - в специализированных коллекциях, в которых хранятся объекты-подчинённые объекта-владельца. Например, TreeNodeCollection хранит подчинённые TreeNode для TreeNode-родителя. Такая коллекция не имеет конструктора без параметров, т.к. не может существовать вне объекта-владельца; коллекцию создаёт объект-владелец и передаёт ей ссылку на себя. Далее всё просто. При добавлении объекта theNode в коллекцию, метод TreeNodeCollection.Add записывает в свойство theNode.Parent ссылку на TreeNode, которая хранится в TreeNodeCollection. Коллекция имеет на это право, т.к. объявлена в той же assembly, где и объект, а аксессор Parent.set сделан internal; или даже поле объявлено как internal, что делает его доступным для записи откуда угодно в той же сборке. При удалении theNode из коллекции, Parent соответственно сбрасывается в null. Остаётся лишь написать собственную реализацию класса и коллекции, "подхачивающую" Parent. Наверное, есть какой-то паттерн описывающий эту конструкцию, но лично я с ним незнаком З.Ы. 0leg, +1 за интересную задачку. -------------------- ![]() |
|||
|
||||
| kobra |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
клас сделать конечно не проблема, но чтобы интегрировать его так-же как TreeNodeCollection интегрирован в TreeNode, вот это ... может поможете? Это сообщение отредактировал(а) kobra - 24.4.2007, 17:18 |
||||||||
|
|||||||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |