![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| DDK |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.4.2008 Репутация: нет Всего: нет |
Есть форма (стандартно Form1) и свой класс (MyClass1, допустим). На форме есть листбокс, в классе формы создал функцию добавления записи в лог:
Пробелма в том, что при обращении к этой функции из другого класса (моего MyClass1) путём
то возникает ошибка: Error An object reference is required for the nonstatic field, method, or property 'WindowsApplication1.Form1.LogBox' <...>\Form1.cs Как вы могли догадаться, я просто хочу сделать функцию, пишущую лог, к кторой без проблем можно обратиться отовсюду |
||||||
|
|||||||
| Voyager |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 532 Регистрация: 8.2.2005 Репутация: 3 Всего: 18 |
Можно применить Singleton
Убери static из метода, сделай глобальную переменную static типа Form1 frm, проинициализируй ее, тогда и сможешь писать через frm.WriteToLog(). |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
... но это не совсем нормальный и правильный метод (в случае например формы - много ресурсов имхо слишком требует)
просто передавай своему классу ссылку на объект класса Form1
Это сообщение отредактировал(а) jonie - 18.4.2008, 00:06 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| DDK |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 17.4.2008 Репутация: нет Всего: нет |
jonie
Спасибо! Сначала долго не получалось, пока не дошёл умом, что передача указателя this при вызове моего класса - весьма необходимая процедура, ибо без этого указатель не будет определён |
|||
|
||||
| source777 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
это просто абсолютно
К чему такая связность? Гораздо логичнее, удобнее и правильнее выделить функциональность логгера в отдельный static класс, а по мере надобности можно делать с этим инкапсулированным логом всё что угодно: записывать в файл, отображать в к-н компоненте на форме, посылать по e-mail, etc.
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
| source777 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Чтобы не быть голословным я тут по-быстрому накидал каркас того, что нужно:
Ну и пример использования:
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||
|
|||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
а лучше взять log4net и посмотреть как стоит сделать, чем городить велосипеды.
я говорил не про логер.. да и в принципе речь не только про логер была) -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| source777 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: 3 Всего: 56 |
Так что не знаю про что ты говорил, но передавать в свой класс, который с самой формой ничего делать не будет, ссылку на форму - это безумие чистой воды, прикинь, если я захочу вместо ListBox1 использовать textBox7? И это ещё самые невинные грабли твоего подхода...
Это сообщение отредактировал(а) source777 - 18.4.2008, 21:46 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
||||||
|
|||||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
source777 да я про заголовок темы сам. впрочем все все поняли) тут человек не понимает даже основы....
---------- закрыли ненужный спор - сильная связность очень не хороший паттерн) -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| alver |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 27.10.2006 Где: Питер Репутация: нет Всего: нет |
Подскажите. Ситуация та же, что у DDK.
Класс вынесен в отдельный файл. Почему не работает, если я, допустим, хочу использовать методы класса в обработчиках событий, но класс там не виден. Пример:
Это сообщение отредактировал(а) alver - 19.5.2008, 15:39 |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: нет Всего: 36 |
alver,
потому что область видимости локальной переменной 'c' ограничивается конструктором Form1 |
|||
|
||||
| alver |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 74 Регистрация: 27.10.2006 Где: Питер Репутация: нет Всего: нет |
А как сделать так, чтоб и форма в класс передавалась и класс можно было использовать везде? |
|||
|
||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: нет Всего: 36 |
FYI, рантайм-часть log4net состоит из одной dll размером 270kb Добавлено через 8 минут и 56 секунд alver, в теме всё уже ответили для лоджера - нужно перепроектировать дизайн. Надо передавать не форму, а интерфейс, который реализует необходимую функциональность. и класс можно было использовать везде? в общем случае воспользоваться паттерном Singletone |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |