| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > struct и иницилизация |
| Автор: DenWPF 16.4.2011, 12:08 | ||||
на данный код заругается компилятор, так требуется инициализации всех полей явно если существует конструктор явный.
в книге говориться что нужно инициализировать все поля. будет ли правильно сделать так:
не чего не нарушу я, таким способом ? |
| Автор: Rohoss 16.4.2011, 13:58 |
1. ключевое слово тут лишнее 2. У меня компилируется и без инициализации полей (и у тебя кстати тоже, потому что переменная m_y нигде не инициализируется). Но всё равно правильно будет их инициализировать. 3. Не по стандартам пишешь каждое поле в отдельной строке надо |
| Автор: DenWPF 16.4.2011, 14:01 | ||
Если убрать this будет ошибка компиляции "Field 'Object_1.SomeValtype.m_y' must be fully assigned before control is returned to the caller "
это с точки производительности, или читаемости кода? |
| Автор: DenWPF 16.4.2011, 14:33 |
| А в чем ты компилируешь, что у тебя работает? |
| Автор: Rohoss 16.4.2011, 14:48 | ||||||
| vs2010 .net 4.0 Работает
Не работает
Работает
|
| Автор: Экскалупатор 16.4.2011, 15:09 |
так у тебя вызывается конструктор по умолчанию, который таки инициализирует все что у тебя объявлено, а потом вызывается этот конкретный конструктор с параметром, который в свою очередь дополнительно задает параметр, получается одно лишнее действие. |
| Автор: DenWPF 16.4.2011, 15:21 |
| ок, я понял. лучше через this так как если у меня появиться ещё одно поле, то его нужно будет инициализировать в конструкторах, а так я себя обезопасил, хотя и затратил чуть больше ресурсов. |
| Автор: Экскалупатор 16.4.2011, 15:27 | ||
ммм, не уверен применимо ли это к структурам(хотя какая в сути разница), но у рихтера есть интересный выход, он предлагает всю инициализацию сводить в один конструктор с наибольшим числом параметров, и вызывать этот конструктор из других, дополняя недостающие параметры значениями по умолчанию. к примеру:
в твоем случае сложность в том что в структурах нельзя сделать свой конструктор без параметров(есть повод задуматься что бы сделать вместо структуры класс). |
| Автор: DenWPF 16.4.2011, 15:38 |
| да конечно применимо, только вот если будет много полей, не совсем удобно будет так делать. хотя с другой стороны, если много полей, значит много раз будет перезаписываться и ещё больше работы если использовать this(). в общем если не лень то лучше создавать главный инициализирующий конструктор. |
| Автор: Экскалупатор 16.4.2011, 15:45 | ||
тут дело даже не в кошерности такого подхода. просто в данном случае весь код инициализации собран в одном месте, и если какой вопрос то сразу видно где искать, упрощает работу в будущем. конструкторы все равно писать придется(в зависимости от задачи), а коль уж этого не избежать то на мой взгляд такой подход будет логичнее и проще, чем в каждом конструкторе писать один и тот же код(возможно просто копипастой). плюс, конечно же, нет лишних инициализаций переменных. |