| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Доступ к объекту другого класса |
| Автор: Буратиныч 20.6.2013, 16:32 | ||
Как получить доступ к объекту другого класса? В данном примере к уже созданной и пополняемой из разных мест программы коллекции mylist_ ?
|
| Автор: vrann 20.6.2013, 17:28 |
| Если я правильно понял попрос, тебе нужно получить доступ к переменным mylist_1 и mylist_2. Самое простое решение дать доступ к переменным mylist, объявив их как public. Выглядеть будет так: namespace ConsoleApplication1 { class Program { public List<string> mylist_1; public List<string> mylist_2; static void Main(string[] args) { mylist_1 = new List<string>(); } mylist_2 = new List<string>(); } class MyClass { Program prg = new Program(); prg.mylist_1 - обращение к первой переменной. Аналогично можно обратиться ко второй } } |
| Автор: Буратиныч 20.6.2013, 17:41 |
| Почему то не хочет создаваться экземпляр prg, да и коллекции тоже не обнаруживаются из класса MyClass. Задача в целом такая: обращаться к коллекции из любого места программы, в т.ч. и при создании и использовании экземпляра класса. |
| Автор: vrann 20.6.2013, 18:16 | ||
| Так, я ошибся немного. Смотри. Метод static void Main(string[] args) является рулящим твоей прогой в данный момент. Т.е. если ты хочешь использовать класс MyClass, объявлять его нужно именно в этом методе, а не наоборот. А вот колекции ты можешь загнать в используемый класс. Вот так например:
|
| Автор: Буратиныч 20.6.2013, 18:28 | ||
А можно ли из рулиемого класса обратиться к рулящему?
|
| Автор: Экскалупатор 20.6.2013, 18:46 |
можно все, но всегда нужно сначала хорошенько подумать зачем это делать. то что ты хочешь это какое то извращение, и, как мне кажется, это попытка прикрутить костыли для решения какой то вполне тривиальной задачи. опиши задачу полнее. а то что тебе хочется можно реализовать через статические классы или статические поля какого то класса. Можно еще синглтон покурить, тож может помочь. |
| Автор: Буратиныч 20.6.2013, 18:56 | ||
Что такое синглтон? Попробовал через статику, но увы
Не знаю какую альтернативу можно придумать. Просто пытаюсь обратиться к члену вне класса при инициализации. Добавлено через 11 минут и 33 секунды Пока я вижу только вариант отправлять лист для наполнения в тот или иной метод по ссылке ref. Но это же ведь его надо везде указывать в аргументах. Не очень удобно, по-моему. Добавлено через 13 минут и 33 секунды Короче, это коллекция для логов, которая собирает инфу о том, что происходит в разных уголках программы. |
| Автор: Буратиныч 20.6.2013, 20:38 | ||
| cool! Имеет ли только смысл выносить переменную в отдельный класс с модификатором статик?
|
| Автор: Экскалупатор 20.6.2013, 20:46 |
| надо делить не по переменным, а по смыслу, т.е. поле должно быть объявлено в том классе в котором оно должно находится логически. если мы говорим про логирование и оно должно быть везде, то очевидно кроме собственно коллекции еще понадобятся методы для обработки этой коллекции, типа сохранние куда нибудь, или рассылка уведомлений, а значит лучше все это вынести как минимум в отдельный класс(ы), а скорее всего может быть даже в отдельный проект, со своей конфигурацией и иерархией. Но все это зависит от масштабов проекта. P.S. повторюсь, лучше взять готовый модуль для логирования, иначе может возникнуть много проблем, особенно с параллельной обработкой этой коллекции. |
| Автор: dzaraev 28.6.2013, 20:20 | ||||||||
| Буратиныч, поймите правильно - вам стоит почитать про основы языка, на котором вы собираетесь писать: http://msdn.microsoft.com/ru-ru/library/zkxk2fwf(v=vs.90).aspx Экскалупатор, наверное пока нет особого смысла грузить человека log4net'ами и синглтонами, т.к. для начала неплохо бы разобраться в статическом контексте вообще. По поводу самого вопроса:
Значит, вам просто нужен простейший список лог-сообщений. В простейшем случае можно сделать так:
То, что вы пишете
как правило реализуется в конечном итоге за счет статических членов, т.к. тип (ваш класс) доступен из любого места программы, где он виден, а вот для обращения к экземпляру необходима ссылка на него(на экземпляр класса). и далее
вот это требование немного не понял, если что - уточните, попробую ответить. |
| Автор: Буратиныч 28.6.2013, 20:39 |
| В целом со статикой я разобрался, всем спасибо! Но остался подвешенным вопрос, если я пишу под WPF как я могу из объекта какого-либо класса обратиться к членам входного класса, т.е public partial class MainWindow : Window ? |
| Автор: dzaraev 28.6.2013, 21:40 |
Что вы имеете в виду под "входным классом" ? Если имеется в виду базовый класс (т.е. тот, от которого наследуется ваш класс), то вы можете из вашего класса обращаться к тем членам базового класса, которые помечены http://msdn.microsoft.com/ru-ru/library/wxh6fsc7(v=vs.100).aspx public, protected или protected internal. |