![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
Допустим, есть класс с, создаю массив
c[] arr = new c[10]; Все элементы массива оказываются несозданными. Создаю их при помощи for (int i = 0; i<arr.Length; i++) c[i] = new c(); А есть какой-то более красивый метод создавать массивы с уже созданными объектами ![]() -------------------- ![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Только такой
![]()
Кста, foreach работает быстрее for ![]() А лучше всего сделать с не классом, а структурой. Структура всегда инициализированна значением по умолчанию ![]() |
|||
|
||||
Prehistorik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 2 Всего: 3 |
Нет. Представь себе, что у тебя конструктор не поумолчанию, а с параметрами. И как компилятор поймёт, какие параметры, какому классу сунуть?
--------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
ivashkanet, foreach перебирает элементы только для чтения, тоесть, вызвать конструктор не получится
Prehistorik, спасибо что объяснил -------------------- ![]() |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 25 Всего: 173 |
ivashkanet, переменные итерации foreach неизменяемы.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
Sartorius |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: 1 Всего: 37 |
Вот так мона (конструктор без параметров)
Вообще new С[n] создает ссылку на массив и соответственно выделяет память под n ссылок в куче. Но .Net требует , что бы при обращении к элементу массива, он был связан с реальным объектом - иначе Exception. Поэтому инициализировать обязательно for-ом или как написано выше. Вот только разом указать инициализирующую переменную для всех экземпляров массива у меня не получилось... |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Sartorius, вообще это и не нужно
![]() -------------------- ![]() |
|||
|
||||
RobbieV |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 25.7.2006 Репутация: нет Всего: нет |
Думаю, можно поступить так, создать такой класс и юзать его для инициализации твоих массивов:
Вот пример, как его можно использовать:
Но только для C# не ниже 2.0. Это сообщение отредактировал(а) RobbieV - 25.7.2006, 23:42 |
||||
|
|||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Блин, а я не знал (вернее знал, но забыл) и работал ![]() Правда у меня VB .Net Пример:
![]() ![]() ![]() ![]() ![]() |
||||
|
|||||
Prehistorik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 2 Всего: 3 |
ivashkanet, заметь, ты не изменяешь row... ты просто с его свойством работаешь... Хотя интересно... Ща попробую....
--------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Правда я саму переменную не менял, а только объект который лежит по адресу содержащемуся в переменной.
P.S. А на кой такое ограничение ![]() ![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Занялся тестрованием такой ситуации, оказалось:
В foreach можно менять только элементы объекта итерации, но не сам объект. В VB можно попытаться изменить и его (ошибки компиляции не будет, и в IL все перенесется нормально), но тольку от этой операции 0. Объект будет все равно старым ![]() Вот такие косяки ![]() И еще хочу напомнить: |
|||
|
||||
Prehistorik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 2 Всего: 3 |
ivashkanet, Я думаю, что такое ограничение нужно для того, чтобы подтверждался известный тезис МелкоЛегко, что foreach безопаснее for.
--------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
![]() Мне просто foreach нравится намного больше for ![]() Ы? MS? |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
-------------------- ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |