| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > .NET для новичков > инициализаторы объектов |
| Автор: nmn 2.10.2009, 18:22 | ||
| в книге Accelerated c# 2008 в главе Автореализуемые свойства на странице 77 есть подобный код
причем утверждается что это единственный способ установки свойства name, у меня же даже он не сработал компилятор сказал что не имеет доступа к name. |
| Автор: ДобренькийПапаша 2.10.2009, 18:32 |
| А вы в какой среде это запускали?))) С какой установленной версией .NET?))) |
| Автор: nmn 2.10.2009, 18:48 |
| vs 2008, .net 3.5 |
| Автор: ДобренькийПапаша 2.10.2009, 19:05 | ||
Такое можно делать будет только в .NET 4.0 Пусть меня кто поправит, если я не прав))) Но по-моему я прав))) |
| Автор: Экскалупатор 2.10.2009, 19:28 |
| попробуй так: test tst=new test(){name="123", id="123"}; P.S. а ты уверен, что в примере именно private set; ? |
| Автор: nmn 2.10.2009, 20:18 |
уверен не работает |
| Автор: nmn 2.10.2009, 21:14 | ||||||||
я про книгу http://www.amazon.com/Accelerated-C-2008-Trey-Nash/dp/1590598733, там написано что так можно делать вот и спрашиваю... выше же все написано |
| Автор: NightmareZ 2.10.2009, 21:19 | ||||||||||
Я не знаю, что у тебя там написано в книге. Я говорю, как оно на самом деле. |
| Автор: Экскалупатор 2.10.2009, 21:46 |
| да в действительно в примере private есть. но это лишний раз подчеркивает то, что бывают опечатки везде. но мне кажется что вполне логично, когда private поле недоступно извне. а если это каким то чудесным образом станет когда то не так, то пропадет весь смысл слова private. |
| Автор: Crypton 2.10.2009, 22:18 |
| Можно поменять на internal, тогда его можно будет назначить только в самой сборке |
| Автор: NightmareZ 2.10.2009, 22:24 | ||
В данном случае не надо менять спецификатор доступа, а значения присваивать в конструкторе. |
| Автор: nmn 2.10.2009, 23:25 | ||||
нет, это не опечатка в оригинале то же самое
|
| Автор: KelTron 3.10.2009, 07:25 |
| Это действительно было так в момент написания книги. Но потом компилятор изменили, а книга осталась неисправленной. Так что это и не опечатка и не ошибка автора. Сейчас же единственный способ инициализировать приватное свойство - в конструкторе. |
| Автор: ДобренькийПапаша 3.10.2009, 08:12 |
| Ничего себе))) Мда, это новость для меня. Я такой конструкции вообще никогда не видел))) |
| Автор: nmn 3.10.2009, 13:00 | ||
а есть какие то упоминания об этом в сети? |
| Автор: PashaPash 3.10.2009, 13:45 |
| nmn, в MSDN (http://msdn.microsoft.com/en-us/library/bb384062.aspx) Object initializers let you assign values to any accessible fields or properties of an object at creation time without having to explicitly invoke a constructor там же рядом (http://msdn.microsoft.com/en-us/library/ms173121.aspx): private - The type or member can only be accessed by code in the same class or struct. |