Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/14: Рейтинг темы: голосов - 14, средняя оценка - 4.93
Virtul
0 / 0 / 0
Регистрация: 11.06.2011
Сообщений: 29
1

Как получить доступ к полю родительского объекта

10.09.2012, 19:09. Просмотров 2768. Ответов 6
Метки нет (Все метки)

Доброго времени суток!
Сразу уточню: вопрос не про наследование, а про отношения parent/child

Задача - получить значения поля из родительского объекта в конструкторе дочернего, но с условием, что у конструктора дочернего не может быть параметров (используется внешняя библиотека xml-rpc)

код примерно такой:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public class ParentClass
    {
        public string someField = "string";
        ChildClass[] child_array;
 
        public ParentClass ()
        {
            child_array = somefunc(); // xml-rpc запрос, возвращающий коллекцию объектов
        }
    }
 
    public class ChildClass
    {
        public ChildClass () // параметров быть не может
        {
            // здесь нужно получить значение someField
        }
    }
вот здесь нашёл отличное решение, но не подходит, т.к. мне нужно получить значение ещё в конструкторе
модет быть кто-нибудь подскажет изящное решение? Был бы очень благодарен
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2012, 19:09
Ответы с готовыми решениями:

Как получить доступ к приватному полю используя рефлексию? (в одном классе)
Хай. Есть такой класс class TestClass { public int a = 1; //находится ...

Как получить доступ к членам объекта?
Здравствуйте. Разбираюсь с классом Newtonsoft.Json, однако, пока не нашел верного подхода к нему....

Доступ к методу родительского класса из метода свойства родительского класса
Не знаю правильно ли написал тему, ну суть такая, есть класс который описывает допустим шарик, а...

Доступ к полям родительского класса (Рефлексия)
Здравствуйте. Есть вот такая конструкция, напишу упрощённо: public partial class A : UserControl...

Datalist: получить доступ к полю
подскажите как можно осуществить доступ к полю: в DataList есть линка... так мне к ней...

6
freeba
Неадекват
1306 / 1100 / 210
Регистрация: 02.04.2010
Сообщений: 2,544
Записей в блоге: 2
Завершенные тесты: 2
10.09.2012, 21:06 2
C#
1
base.someField
Добавлено через 6 минут
Цитата Сообщение от Virtul Посмотреть сообщение
Сразу уточню: вопрос не про наследование, а про отношения parent/child
Сорри, недоглядел. В таком случае может сделать поле someField статическим? Или подразумевается отношение многие ко многим?
0
kolorotur
Эксперт .NET
11599 / 9357 / 2382
Регистрация: 17.09.2011
Сообщений: 16,014
Завершенные тесты: 1
10.09.2012, 21:12 3
Не понял в чем проблема.
Поле родительского класса можно очень легко получить в конструкторе дочернего - как указал выше товарищ freeba.
0
Virtul
0 / 0 / 0
Регистрация: 11.06.2011
Сообщений: 29
10.09.2012, 21:33  [ТС] 4
Цитата Сообщение от freeba Посмотреть сообщение
C#
1
base.someField
Добавлено через 6 минут

Сорри, недоглядел. В таком случае может сделать поле someField статическим? Или подразумевается отношение многие ко многим?
ничего страшного, все так

описываю задачу подробнее:

есть сайт, сайт делится на курсы, курсы делятся на разделы, они делятся на занятия, которые делятся на файлы (это всё не моё), инфа о всей этой прелести забирается мной через xml-rpc, кстати сайтов больше одного

программа сливает те самые файлы и раскидывает их по папочкам в соответствии с этой иеархией

объект сайт (родительский) инициализируется гораздо раньше его содержимого(курсов и т.д.) и, в частности, содержит путь к папочке, где будет выстроено дерево из каталогов

дальше один из методов сайта через http запрос получает информацию о содержимом сайта (курсы и т.д.)

у объект курса есть конструктор, который должен создать папочку для себя, у объекта раздела - тоже самое, а занятие себе папочку создаёт и свои файлы скачивает с сервера в неё

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

конечно, можно иметь отдельный (имхо лишний) объект представляющий собой дерево, но хотелось бы всё же услышать мнения гуру какие-нить там хитрые штуки вроде событий и рефликсии особо приветствуются
0
freeba
Неадекват
1306 / 1100 / 210
Регистрация: 02.04.2010
Сообщений: 2,544
Записей в блоге: 2
Завершенные тесты: 2
10.09.2012, 21:52 5
Месье знает толк в извращениях.

Я бы использовал рекурсию. Действия-то повторяющиеся и потребность в насилии над мозгом будет удовлетворена.
0
Virtul
0 / 0 / 0
Регистрация: 11.06.2011
Сообщений: 29
11.09.2012, 17:50  [ТС] 6
Цитата Сообщение от freeba Посмотреть сообщение
Я бы использовал рекурсию. Действия-то повторяющиеся и потребность в насилии над мозгом будет удовлетворена.
а можно Вас попросить чуть поподробнее объяснить что куда?
0
freeba
Неадекват
1306 / 1100 / 210
Регистрация: 02.04.2010
Сообщений: 2,544
Записей в блоге: 2
Завершенные тесты: 2
11.09.2012, 19:49 7
Объяснить рекурсию? Целые поколения программистов уходят так и не познав прелесть и мощь рекурсивных алгоритмов.

Нужные вам действия повторяющиеся. Получаем корневой элемент => создаем папку => получаем связанный список объектов => сохраняем => если это не конечный список => каждые из полученных объектов становиться корневым => начало
0
11.09.2012, 19:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2012, 19:49

Получить имя родительского объекта
Здравствуйте. Как получить имя контейнера Grid, в котором расположен элемент Button?

Ошибка: вызывающий поток не может получить доступ к данному объекту, так как владельцем этого объекта является другой поток.
Ошибка в "progressBar1.Value += 50;", вызывающий поток не может получить доступ к данному объекту,...

Обращение к одному дочернему полю родительского класса через другое дочернее поле
Здравствуйте, пишу на форумы первый раз, потому, пожалуйста, не горите, если что не так, но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru