| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > массив типа класса |
| Автор: Bogdan1024 24.7.2006, 23:24 |
| Допустим, есть класс с, создаю массив c[] arr = new c[10]; Все элементы массива оказываются несозданными. Создаю их при помощи for (int i = 0; i<arr.Length; i++) c[i] = new c(); А есть какой-то более красивый метод создавать массивы с уже созданными объектами |
| Автор: ivashkanet 25.7.2006, 08:48 | ||
Только такой
Кста, foreach работает быстрее for А лучше всего сделать с не классом, а структурой. Структура всегда инициализированна значением по умолчанию |
| Автор: Prehistorik 25.7.2006, 08:49 |
| Нет. Представь себе, что у тебя конструктор не поумолчанию, а с параметрами. И как компилятор поймёт, какие параметры, какому классу сунуть? |
| Автор: Bogdan1024 25.7.2006, 16:41 |
| ivashkanet, foreach перебирает элементы только для чтения, тоесть, вызвать конструктор не получится Prehistorik, спасибо что объяснил |
| Автор: Void 25.7.2006, 16:49 |
| ivashkanet, переменные итерации foreach неизменяемы. |
| Автор: Sartorius 25.7.2006, 18:29 | ||
Вот так мона (конструктор без параметров)
Вообще new С[n] создает ссылку на массив и соответственно выделяет память под n ссылок в куче. Но .Net требует , что бы при обращении к элементу массива, он был связан с реальным объектом - иначе Exception. Поэтому инициализировать обязательно for-ом или как написано выше. Вот только разом указать инициализирующую переменную для всех экземпляров массива у меня не получилось... |
| Автор: mr.DUDA 25.7.2006, 22:59 |
| Sartorius, вообще это и не нужно |
| Автор: RobbieV 25.7.2006, 23:35 | ||||
Думаю, можно поступить так, создать такой класс и юзать его для инициализации твоих массивов:
Вот пример, как его можно использовать:
Но только для C# не ниже 2.0. |
| Автор: Prehistorik 26.7.2006, 09:20 |
| ivashkanet, заметь, ты не изменяешь row... ты просто с его свойством работаешь... Хотя интересно... Ща попробую.... |
| Автор: ivashkanet 26.7.2006, 09:20 |
| Правда я саму переменную не менял, а только объект который лежит по адресу содержащемуся в переменной. P.S. А на кой такое ограничение |
| Автор: ivashkanet 26.7.2006, 09:58 |
| Занялся тестрованием такой ситуации, оказалось: В foreach можно менять только элементы объекта итерации, но не сам объект. В VB можно попытаться изменить и его (ошибки компиляции не будет, и в IL все перенесется нормально), но тольку от этой операции 0. Объект будет все равно старым Вот такие косяки И еще хочу напомнить: |
| Автор: Prehistorik 26.7.2006, 12:47 |
| ivashkanet, Я думаю, что такое ограничение нужно для того, чтобы подтверждался известный тезис МелкоЛегко, что foreach безопаснее for. |
| Автор: ivashkanet 26.7.2006, 12:55 |
| Мне просто foreach нравится намного больше for Ы? MS? |
| Автор: mr.DUDA 26.7.2006, 14:14 | ||
|