| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > эррэй лист |
| Автор: kettle 17.6.2008, 23:14 |
| Здравствуйте! можно ли для разных объектов класса запись производить в один и тот же массив? т.е. например у меня есть класс Пр, хочу написать скажем Пр1.Эррэй_лист.Эдд Пр2.Эррэй_лист.Эдд и так далее?) наверное, мой вопрос совсем дурацкий)) |
| Автор: mihryak 18.6.2008, 00:36 | ||
вот так можно - через статическое поле, оно шарится между всеми экземплярами этого класса
но в этом что-то есть несимпатичное (имею в виду не общий статический список, а постановку задачи) зачем это понадобилось? |
| Автор: Certain 5.7.2008, 02:27 | ||
Уважаемый mihryak, поле readonly инициализировать можно только в реализации коструктора класса, статические readonly соответственно только в статичесих конструкторах, так что это не вариант... |
| Автор: Partizan 5.7.2008, 09:46 | ||
Certain,
Вы ошибаетесь. |
| Автор: Certain 5.7.2008, 12:47 |
| Partizan , |
| Автор: Partizan 5.7.2008, 14:49 | ||||
Certain,
посмотрите секцию Remarks по поводу ключевого слова readonly в MSDN |
| Автор: nikitao 7.7.2008, 11:44 |
| Partizan, я так понял , что вы имеете ввиду декларативную инициализацию ? Если так , то это часть конструктора , так что Certain прав. |
| Автор: Partizan 7.7.2008, 14:21 | ||||||
nikitao, Читаем внимательнее:
Во-первых я показал, что поле readonly инициализировать можно не только в реализации коструктора класса Во-вторых я показал, что статические readonly инициализировать можно и без реализации статического конструктора |
| Автор: mihryak 7.7.2008, 15:49 |
| а о чём спор-то вообще идёт? о том, какой код во что транслится, или о том, можно ли инициализировать readonly не в конструкторах? если второй пункт - то люлбой, имеющий компиллятор, может проверить и получить однозначный ответ. |
| Автор: Partizan 7.7.2008, 15:51 |
| PashaPash, во что код превращается - это другая тема...прочитайте топик с самого начала... в ответ на код mihryak, который вполне валиден и имеет право на существование, Certain возразил что "поле readonly инициализировать можно только в реализации коструктора класса"...хотя фактически это не так... опять повторюсь, что с тем что компилятор встраивает инициализацию в конструктор внутри я ни капли не спорю... я всего-лишь понял пост Certain-а как отрицающий валидность кода приведённого mihryak-ом... |
| Автор: PashaPash 7.7.2008, 16:06 |
| Partizan, inline-инициализация - это часть конструктора с точки зрения CLR, и часть объявления поля с точки зрения C#. Так что все правы понемногу. А по теме - за public ArrayList надо громко ругать. |
| Автор: nikitao 7.7.2008, 18:14 |
| Согласен с PashaPash. Я об этом и говорил. |
| Автор: Partizan 7.7.2008, 19:02 |
| nikitao, Зато Certain явно говорил о другом ) |
| Автор: nikitao 7.7.2008, 19:48 |
| Ладно. Все поняли , что все друг друга поняли |
| Автор: wotker 7.7.2008, 19:51 |
| Главное что не поругались! =) Автор уже давно походу не следит за темой |
| Автор: Certain 9.7.2008, 22:27 | ||||||||
| В догонку Начнем, пожалуй, с задачи
Тут все четко сказано! Нужно использовать много (как минимум 2) экземпляров одного, в данном случае Pr, класса! И при этом, где-то при использовании в коде, чтобы можно было добавить элемент в массив экземпляра класса, удалить или изменить! Теперь к дискуссии: Уважаемый Partizan Я не писал, что код
неправильный, я только сказал, что это "не вариант" для решения данной задачи (прошу не путать) По поводу примера "инициализации" Partizanа
строка public static readonly ArrayList arr = new ArrayList(); это всего лишь объявление экземпляра класса ArrayList! Да, не спорю, при этом инициализируются все поля этого класса в null или 0! Но при использовании такого класса, зачем мне нулевой массив, как я буду его использовать в своем коде, какие операции я могу с ним производить(добавить , удалить, изменить)?! - НИКАК! Речь идет про инициализацию элементов массива, объявленного как поле readonly! Как не крути, инициализировать элементы (в данном случае) массива readonly Вы сможите только -в конструкторе класса, -в методе класса, опять же, передав этом массив как параметр метода! Этот метод должен вызываться только из конструктора, -или, воспользовавшись новшеством языка C# 3.0 - автореализуемые поля, пример привести не могу, т.к. нет под рукой студии 2008(последнее я утверждать не могу, не проверял, но судя по документации можно инициализировать свойства "только для чтения", соответственно, я предполагаю,что и readonly можно инициализировать аналогичным путем) ввел в поисковик поля readonly в C# и из первой же найденой статьи:
Помоему кто-то кого-то не правильно понял.... Вобщем, к данной задаче использовать такие поля не вариант! |
| Автор: mihryak 9.7.2008, 22:42 | ||||
чушь, простите =) строка
производит полноценные создание и инициализацию списка работать с таким созданным экземпляром можно как угодно и где угодно - как внутри класса в любом методе, как и вынеся его наружу (хреновость второго метода оставим за кадром) явный конструктор тут вовсе необязателен и в цитате приведённой ниже тоже чушь написана, так бывает =) пс. перед такими трактатами стоило всё же мой код запустить и убедиться в - синтаксической правильности - работоспособности - удовлетворении поставленных требований (про хреновость такой реализации здесь пишу третий раз) добавление кажется, понял причину недопонимания Certain'а - она в неправильном понимании инициализации на самом деле, инициализация в данном контексте - лишь присваивание значения, она действительно возможно только при объявлении поля и в конструкторе а работа с объектом, который, собственно, был присвоен этому полю в дальшейшем доступна любая, предоставляемая его интерфейсом т.е. заполнение дефолтовыми значениями, прочие добавления/удаления и т.п. - это вовсе не инициализация, а работа с уже готовым с использованию объектом |
| Автор: Certain 9.7.2008, 23:17 | ||
http://msdn.microsoft.com/en-us/library/acdd6hb7(VS.80).aspx Добавления! Поповоду ссылочных типов, ты прав.... потому что в поле readonly записывается только ссылка на объект, соответственно её изменять нельзя, а с самим объектом можно делать все что угодно.... да точно! Я говорил про поля readonly значимых типов, не учел, что массивы к сылочным типам относятся... Твои объяснения меня только путают... трактат выдал Нельзя просто написать, что все эти правила для readonly относятся только к значимым типам, с сылочными изменять можно в объекте все, кроме ссылки на объект, воды много |
| Автор: mihryak 9.7.2008, 23:35 | ||||||||||
переводим
то же самое пишет и msdn в Вашей же ссылке
хотите сказать, что код
не будет работать или выдаст разные списки? ну-ну неужели не возникло сомнение в своей правоте и не заставило написать тестик на проверку? |
| Автор: Certain 9.7.2008, 23:39 |
| см. выше, обновил уже давно Вопрос: Для чего в этой задаче применять поле readonly? Смысл? |
| Автор: Partizan 9.7.2008, 23:50 |
| Certain, mihryak, чесно, даже добавлять ничего не хочется ))) аффтар уже давно получил решение задачи, а истина была установлена =) |
| Автор: Certain 9.7.2008, 23:57 |
| Да, я тоже так думаю, давайте закроем эту тему! Уважаемый mihryak, признаю Вашу правоту! Разобрались, на разные темы рассуждали, да и я не все учел! Давайте жить дружно, мне Ваша помощь ещё понадобиться! |
| Автор: nikitao 9.7.2008, 23:58 |
| Все тут неосилил, но последний пост мне понравился. УРА! |
| Автор: mihryak 10.7.2008, 00:05 |
| мир-труд-май =) |