![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Буратиныч |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 15.3.2011 Репутация: нет Всего: нет |
Как получить доступ к объекту другого класса? В данном примере к уже созданной и пополняемой из разных мест программы коллекции mylist_ ?
|
|||
|
||||
| vrann |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 20.6.2013 Репутация: нет Всего: нет |
Если я правильно понял попрос, тебе нужно получить доступ к переменным 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 - обращение к первой переменной. Аналогично можно обратиться ко второй } } |
|||
|
||||
| Буратиныч |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 15.3.2011 Репутация: нет Всего: нет |
Почему то не хочет создаваться экземпляр prg, да и коллекции тоже не обнаруживаются из класса MyClass.
Задача в целом такая: обращаться к коллекции из любого места программы, в т.ч. и при создании и использовании экземпляра класса. |
|||
|
||||
| vrann |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 20.6.2013 Репутация: нет Всего: нет |
Так, я ошибся немного.
Смотри. Метод static void Main(string[] args) является рулящим твоей прогой в данный момент. Т.е. если ты хочешь использовать класс MyClass, объявлять его нужно именно в этом методе, а не наоборот. А вот колекции ты можешь загнать в используемый класс. Вот так например:
|
|||
|
||||
| Буратиныч |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 15.3.2011 Репутация: нет Всего: нет |
А можно ли из рулиемого класса обратиться к рулящему?
|
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
можно все, но всегда нужно сначала хорошенько подумать зачем это делать. то что ты хочешь это какое то извращение, и, как мне кажется, это попытка прикрутить костыли для решения какой то вполне тривиальной задачи. опиши задачу полнее. а то что тебе хочется можно реализовать через статические классы или статические поля какого то класса. Можно еще синглтон покурить, тож может помочь. |
|||
|
||||
| Буратиныч |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 15.3.2011 Репутация: нет Всего: нет |
Что такое синглтон? Попробовал через статику, но увы
Не знаю какую альтернативу можно придумать. Просто пытаюсь обратиться к члену вне класса при инициализации. Добавлено через 11 минут и 33 секунды Пока я вижу только вариант отправлять лист для наполнения в тот или иной метод по ссылке ref. Но это же ведь его надо везде указывать в аргументах. Не очень удобно, по-моему. Добавлено через 13 минут и 33 секунды Короче, это коллекция для логов, которая собирает инфу о том, что происходит в разных уголках программы. |
|||
|
||||
| Экскалупатор |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
надо подучить модификаторы доступа... Добавлено @ 19:55 Синглтон - паттерн проектирования Добавлено @ 19:58
не стоит изобретать велосипед в этом вопросе. все уже давно изобретено. к примеру log4net уже дает весь требуемый функционал, и дает кучу всяких плюшек, к примеру, формат записи в лог или сохранение в файл/базу Это сообщение отредактировал(а) Экскалупатор - 20.6.2013, 20:00 |
||||
|
|||||
| Буратиныч |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 15.3.2011 Репутация: нет Всего: нет |
cool!
Имеет ли только смысл выносить переменную в отдельный класс с модификатором статик?
|
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 11 Всего: 24 |
надо делить не по переменным, а по смыслу, т.е. поле должно быть объявлено в том классе в котором оно должно находится логически. если мы говорим про логирование и оно должно быть везде, то очевидно кроме собственно коллекции еще понадобятся методы для обработки этой коллекции, типа сохранние куда нибудь, или рассылка уведомлений, а значит лучше все это вынести как минимум в отдельный класс(ы), а скорее всего может быть даже в отдельный проект, со своей конфигурацией и иерархией. Но все это зависит от масштабов проекта.
P.S. повторюсь, лучше взять готовый модуль для логирования, иначе может возникнуть много проблем, особенно с параллельной обработкой этой коллекции. |
|||
|
||||
| dzaraev |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: нет Всего: 1 |
Буратиныч, поймите правильно - вам стоит почитать про основы языка, на котором вы собираетесь писать: http://msdn.microsoft.com/ru-ru/library/zk...f(v=vs.90).aspx
Экскалупатор, наверное пока нет особого смысла грузить человека log4net'ами и синглтонами, т.к. для начала неплохо бы разобраться в статическом контексте вообще. По поводу самого вопроса:
Значит, вам просто нужен простейший список лог-сообщений. В простейшем случае можно сделать так:
То, что вы пишете
как правило реализуется в конечном итоге за счет статических членов, т.к. тип (ваш класс) доступен из любого места программы, где он виден, а вот для обращения к экземпляру необходима ссылка на него(на экземпляр класса). и далее
вот это требование немного не понял, если что - уточните, попробую ответить. Это сообщение отредактировал(а) dzaraev - 28.6.2013, 20:23 --------------------
Если вопрос решён - помечайте тему. |
||||||||
|
|||||||||
| Буратиныч |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 15.3.2011 Репутация: нет Всего: нет |
В целом со статикой я разобрался, всем спасибо! Но остался подвешенным вопрос, если я пишу под WPF как я могу из объекта какого-либо класса обратиться к членам входного класса, т.е public partial class MainWindow : Window ?
|
|||
|
||||
| dzaraev |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 149 Регистрация: 12.1.2013 Репутация: нет Всего: 1 |
Что вы имеете в виду под "входным классом" ? Если имеется в виду базовый класс (т.е. тот, от которого наследуется ваш класс), то вы можете из вашего класса обращаться к тем членам базового класса, которые помечены модификаторами public, protected или protected internal. --------------------
Если вопрос решён - помечайте тему. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |