![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
нужно чтобы до создания экземпляра класса у данного класса был обязательно определен статический член класса.как это реализовать?есть предположение,что както можно это сделать через атрибуты,но дальше предположения мысль не идет...через простую проверку в конструкторе - не катит.
-------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
kobra |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 730 Регистрация: 15.6.2005 Где: Грузия, Тбилиси Репутация: 1 Всего: 9 |
для этого есть статические конструкторы.
|
|||
|
||||
4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
а если надо инициализировать поле неопределенными параметрами?кот при компиляции не известны... -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Совсем-совсем неопределёнными или может всё-таки зависящими, например, от фазы луны? ![]() Ты, видимо, не совсем понял, что такое "статический конструктор":
Это сообщение отредактировал(а) Дрон - 21.5.2007, 18:36 -------------------- Да. Именно так. |
|||
|
||||
4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
Дрон,
у нас класс SomeClass вообще не имеет понятия,о том какая строка(например) ему будет передаваться,а значит ничего он расчитать сам не сможет.те нужно просто инициализировать статическую перем класса,но сделать это нужно красиво) -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Я чего-то туплю: если класс ничего ни о чём не знает, то чем же тогда инициализировать? Э... ну так, а мы о чём? Я, правда, в первом примере серьёзную опечатку сделал -- скобки метода забыл. Может вот так будет понятней:
Статический конструктор вызывается автоматически до создания первого экземпляра класса. -------------------- Да. Именно так. |
||||
|
|||||
4ybaka |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
так блин,это все и ежу понятно...
надеюсь теперь понятно? ![]()
я бы это не назвал прям такой серьезной опечаткой...;) -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
||||
|
|||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
4ybaka, хмм... Виноват. Чувствую в эту тему нужен кто-то со свежим взглядом, а то меня сейчас точно заклинит
![]() Вообще, мне кажется, что ты усложняешь себе жизнь ![]() Можешь словами описать то, что ты хочешь сделать. Т.е. во-перых, объяснить, почему просто вызов A.S = str; тебя не устраивает? А во-вторых, зачем вообще такая хитрость нужна? По мне так всё это скорее всего противоречит правилам ООП. Зачем, например, делать статическую переменную в классе A, если можно str в классе B объявить как public static. Или зачем вообще ей быть статической, если её инициализация неразрывно связана с созданием объекта. Как-то всё это странно выглядит. Вроде как, где-то в глубинах сознания, я понимаю, что вся эта конструкция может иметь смысл, но всё же мой опыт говорит мне, что тут что-то не так и можно сделать по-другому ![]() Просто я сначала подумал, что ты вообще про статические конструкторы не знаешь, тогда бы это могло сбить с толку. А так, конечно, ясно про что я хотел сказать ![]() Это сообщение отредактировал(а) Дрон - 21.5.2007, 22:06 -------------------- Да. Именно так. |
|||
|
||||
4ybaka |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
это означает,что мы можем в любой момент изменить поле A.S,чего нельзя.даже если поставить защиту на изменение,то это дополнительная переменная(а значит и память),+ сбиваем с толку программиста:"почему этот гребаный метод не работает как надо?!!!!":)
эта переменная была приведена для примера.фактически она формируется один раз и удалялется.да и вообще класс А является автономным,поэтому не допускается зависимость от другого класса...
1)назначение статической переменной никак не связано с ее инициализацией.еси есть один Graphics для всего класса,то зачем его делать для каждой переменной?2)ее инициализация должна предшествовать созданию объекта,тк при создании последнего она может потребоваться... впринципе я начинают понимать,что это не сделать,как я хотел...но если будут предложения,обязательно выслушаю. -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
||||||
|
|||||||
archeg |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 6.1.2007 Где: Киев Репутация: 11 Всего: 27 |
Передавай в перегружений конструктор строку. Например вот так:
-------------------- ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru) Дядька всегда можно спросить в аське, если не задалбывать - не откажет ![]() И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои ;) |
|||
|
||||
Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
Попробую ещё раз.
Итак, у нас есть статическая переменная в классе A, которую нужно инициализировать извне, причём инициализировать один единственный раз, ещё до создания первого экземпляра класса. После инициализации, переменную изменять уже нельзя. Хмм...Статические переменные -- это всё-таки плохо. Например, ты точно уверен, что за всё время выполнения программы тебе не понадобится изменять эту переменную? Мне кажется, это довольно редкий случай. А так, я бы всё-таки сделал что-то вроде:
-------------------- Да. Именно так. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Дрон, ага, так.
Я так у себя делал: Сначала инициализируются два класса и сообщают об этом с помощью ContextControlLoaded и WorkControlLoaded. После того как оба загружены создается экземпляр менеджера. Если к нему обращаются до загрузки этих двух частей, то выкидывается исключение.
|
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Индусы написали бы так
![]()
в момент вызова new A() перед заходом в конструктор экземпляра мы зайдем в статический конструктор. Ну, или когда будем вызывать статический метод класса A. Это сообщение отредактировал(а) tol05 - 22.5.2007, 17:29 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
4ybaka |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 28.4.2007 Репутация: нет Всего: нет |
archeg, идея нормальная,но смущает немного то,что придется создавать объект.я конечно понимаю,что на него можно и не обращать внимание,но всеже...
Дрон, я как раз делал именно так,но оказалось,что таких переменных несколько,и меня не порадовала перспектива писать много раз одно и тоже...кстати я уже писал по поводу этого варианта ![]() ivashkanet, а можно по подробней,как это все работает?те просто объяснить принцип действия...например не понятно "Сначала инициализируются два класса",это как? tol05, ну про индусов я к сожалению промолчал,когда говорил об автономности класса.... ![]() -------------------- "То,что вы понимаете - это все,что вы понимаете." Брайн Керниган |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Я имел в виду:
- не искать сложного в простом - про индусов - это моя личная тема ![]() Давай вспомним задачу. Нужно проинициализировать статическую переменную класса, т.е. до создания первого экземпляра класса. Правильно? ![]() Как это сделать? Только статическим конструктором. Откуда взять данные? Из хранилища, а им может быть что угодно. Кроме, конечно, экземпляра другого класса, т.к. неизвестно, будет ли он вообще создан и когда. Но в статической переменной хранить - гораздо надежнее. Хоть один класс-хранилище-то будет создан до экземпляра класса А, я надеюсь ![]() Ну, раз уж ОН создает A. Так я думал, да и сейчас так же думаю. А вообще, данные можно хранить где угодно, в БД, в файле, в MemoryStream, разве в этом дело? Разве в этом был вопрос?
Вот и все. Это сообщение отредактировал(а) tol05 - 23.5.2007, 17:16 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [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. |