![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| DenWPF |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
на данный код заругается компилятор, так требуется инициализации всех полей явно если существует конструктор явный.
в книге говориться что нужно инициализировать все поля. будет ли правильно сделать так:
не чего не нарушу я, таким способом ? |
||||
|
|||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: нет Всего: 18 |
1. ключевое слово тут лишнее 2. У меня компилируется и без инициализации полей (и у тебя кстати тоже, потому что переменная m_y нигде не инициализируется). Но всё равно правильно будет их инициализировать. 3. Не по стандартам пишешь каждое поле в отдельной строке надо |
|||
|
||||
| DenWPF |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
Если убрать this будет ошибка компиляции "Field 'Object_1.SomeValtype.m_y' must be fully assigned before control is returned to the caller "
это с точки производительности, или читаемости кода? Это сообщение отредактировал(а) DenWPF - 16.4.2011, 14:01 |
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: нет Всего: 18 |
Читаемости! Это более важный параметр нежели производительность, которая ИМХО, здесь тоже не страдает Добавлено через 1 минуту и 51 секунду
ну в таком случае нужно инициализировать все поля |
|||
|
||||
| DenWPF |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
А в чем ты компилируешь, что у тебя работает?
|
|||
|
||||
| Rohoss |
|
||||||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: нет Всего: 18 |
vs2010 .net 4.0
Работает
Не работает
Работает
|
||||||
|
|||||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
так у тебя вызывается конструктор по умолчанию, который таки инициализирует все что у тебя объявлено, а потом вызывается этот конкретный конструктор с параметром, который в свою очередь дополнительно задает параметр, получается одно лишнее действие. |
|||
|
||||
| DenWPF |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
ок, я понял. лучше через this так как если у меня появиться ещё одно поле, то его нужно будет инициализировать в конструкторах, а так я себя обезопасил, хотя и затратил чуть больше ресурсов.
|
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
ммм, не уверен применимо ли это к структурам(хотя какая в сути разница), но у рихтера есть интересный выход, он предлагает всю инициализацию сводить в один конструктор с наибольшим числом параметров, и вызывать этот конструктор из других, дополняя недостающие параметры значениями по умолчанию. к примеру:
в твоем случае сложность в том что в структурах нельзя сделать свой конструктор без параметров(есть повод задуматься что бы сделать вместо структуры класс). |
|||
|
||||
| DenWPF |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1659 Регистрация: 26.9.2009 Репутация: нет Всего: 1 |
да конечно применимо, только вот если будет много полей, не совсем удобно будет так делать.
хотя с другой стороны, если много полей, значит много раз будет перезаписываться и ещё больше работы если использовать this(). в общем если не лень то лучше создавать главный инициализирующий конструктор. |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
тут дело даже не в кошерности такого подхода. просто в данном случае весь код инициализации собран в одном месте, и если какой вопрос то сразу видно где искать, упрощает работу в будущем. конструкторы все равно писать придется(в зависимости от задачи), а коль уж этого не избежать то на мой взгляд такой подход будет логичнее и проще, чем в каждом конструкторе писать один и тот же код(возможно просто копипастой). плюс, конечно же, нет лишних инициализаций переменных. |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [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. |