Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> инициализаторы объектов 
V
    Опции темы
nmn
Дата 2.10.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



в книге Accelerated c# 2008 в главе Автореализуемые свойства на странице 77
есть подобный код
Код

class test
    {
        public string name
        { get; private set; }
        public string id
        { get; set; }
    }

public Main()
{
test tst=new test{name="123", id="123"};
}


причем утверждается что это единственный способ установки свойства name, у меня же даже он не сработал
компилятор сказал что не имеет доступа к name.
PM Skype   Вверх
ДобренькийПапаша
Дата 2.10.2009, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



А вы в какой среде это запускали?))) С какой установленной версией .NET?)))

Это сообщение отредактировал(а) ДобренькийПапаша - 2.10.2009, 18:32


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
nmn
Дата 2.10.2009, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



vs 2008, .net 3.5
PM Skype   Вверх
ДобренькийПапаша
Дата 2.10.2009, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Цитата

public Main()
{
test tst=new test{name="123", id="123"};
}


Такое можно делать будет только в .NET 4.0

Пусть меня кто поправит, если я не прав)))
Но по-моему я прав)))


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Экскалупатор
Дата 2.10.2009, 19:28 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



попробуй так:
test tst=new test(){name="123", id="123"};

P.S. а ты уверен, что в примере именно private set; ?

Это сообщение отредактировал(а) Экскалупатор - 2.10.2009, 19:31
PM MAIL ICQ   Вверх
nmn
Дата 2.10.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



Цитата(Экскалупатор @  2.10.2009,  19:28 Найти цитируемый пост)

P.S. а ты уверен, что в примере именно private set; ?


уверен


Цитата(Экскалупатор @  2.10.2009,  19:28 Найти цитируемый пост)
test tst=new test(){name="123", id="123"};

не работает

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  123.PNG 34,73 Kb
PM Skype   Вверх
NightmareZ
Дата 2.10.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 1
Всего: 13



Цитата(ДобренькийПапаша @  2.10.2009,  19:05 Найти цитируемый пост)
Такое можно делать будет только в .NET 4.0Пусть меня кто поправит, если я не прав)))Но по-моему я прав)))

Иногда лучше жувать  smile 

nmn, во-первых, что это за бред?
Код

public Main()

Если это функция, то какой тип возвращаемого значения?
Нужно писать так:
Код

public static void Main()

Во-вторых, у тебя сеттер поля name приватный. Поэтому извне полю ничего нельзя присвоить напрямую.


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
nmn
Дата 2.10.2009, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



Цитата(NightmareZ @ 2.10.2009,  20:49)
Цитата(ДобренькийПапаша @  2.10.2009,  19:05 Найти цитируемый пост)
Такое можно делать будет только в .NET 4.0Пусть меня кто поправит, если я не прав)))Но по-моему я прав)))

Иногда лучше жувать  smile 

nmn, во-первых, что это за бред?
Код

public Main()

Если это функция, то какой тип возвращаемого значения?
Нужно писать так:
Код

public static void Main()

Во-вторых, у тебя сеттер поля name приватный. Поэтому извне полю ничего нельзя присвоить напрямую.

я про книгу http://www.amazon.com/Accelerated-C-2008-T...h/dp/1590598733, там написано что так можно делать
вот и спрашиваю...
выше же все написано
PM Skype   Вверх
NightmareZ
Дата 2.10.2009, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 1
Всего: 13



Цитата(nmn @ 2.10.2009,  21:14)
Цитата(NightmareZ @ 2.10.2009,  20:49)
Цитата(ДобренькийПапаша @  2.10.2009,  19:05 Найти цитируемый пост)
Такое можно делать будет только в .NET 4.0Пусть меня кто поправит, если я не прав)))Но по-моему я прав)))

Иногда лучше жувать  smile 

nmn, во-первых, что это за бред?
Код

public Main()

Если это функция, то какой тип возвращаемого значения?
Нужно писать так:
Код

public static void Main()

Во-вторых, у тебя сеттер поля name приватный. Поэтому извне полю ничего нельзя присвоить напрямую.

я про книгу http://www.amazon.com/Accelerated-C-2008-T...h/dp/1590598733, там написано что так можно делать
вот и спрашиваю...
выше же все написано

Я не знаю, что у тебя там написано в книге. Я говорю, как оно на самом деле.


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
Экскалупатор
Дата 2.10.2009, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



да в действительно в примере private есть. но это лишний раз подчеркивает то, что бывают опечатки везде. но мне кажется что вполне логично, когда private поле недоступно извне. а если это каким то чудесным образом станет когда то не так, то пропадет весь смысл слова private.
PM MAIL ICQ   Вверх
Crypton
Дата 2.10.2009, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 9.10.2006
Где: США, Санкт-Петерб ург

Репутация: нет
Всего: 2



Можно поменять на internal, тогда его можно будет назначить только в самой сборке
--------------------
«Все, что вы знаете — ложь» Теория мироздания 
PM MAIL WWW ICQ Skype   Вверх
NightmareZ
Дата 2.10.2009, 22:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 10.8.2006

Репутация: 1
Всего: 13



Цитата(Crypton @ 2.10.2009,  22:18)
Можно поменять на internal, тогда его можно будет назначить только в самой сборке

В данном случае не надо менять спецификатор доступа, а значения присваивать в конструкторе.


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
nmn
Дата 2.10.2009, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



Цитата(Экскалупатор @ 2.10.2009,  21:46)
да в действительно в примере private есть. но это лишний раз подчеркивает то, что бывают опечатки везде. но мне кажется что вполне логично, когда private поле недоступно извне. а если это каким то чудесным образом станет когда то не так, то пропадет весь смысл слова private.

нет, это не опечатка

в оригинале то же самое

Код

You can also create a read-only auto-implemented property by inserting the private keyword
as shown below:
public class Employee
{
public string FullName { get; private set; }
public string Id { get; set; }
}
At this point, you may be wondering how the FullName field ever gets set. After all, it’s read-only
and the private field representing the underlying storage has a compiler-generated name that we
cannot use in a constructor to assign to it. The solution is to use another new C# 3.0 feature called
object initializers, as shown in the following example:
using System;
public class Employee
{
public string FullName { get; private set; }
public string Id { get; set; }
}
public class AutoProps
{
static void Main() {
Employee emp = new Employee {
FullName = "John Doe",
Id = "111-11-1111"
};
}
}
Object initializers complement auto-implemented properties. Not only do they allow you a
means to set read-only auto-implemented properties, but they also give the instantiator of the
instance syntax similar to that normally provided by constructors whereby one passes values to the
constructor during instantiation to initialize the type appropriately. You can find out more about
object initializers in the “Object Initializers” section later in this chapter.

PM Skype   Вверх
KelTron
Дата 3.10.2009, 07:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 11
Всего: 38



Это действительно было так в момент написания книги. Но потом компилятор изменили, а книга осталась неисправленной. 
Так что это и не опечатка и не ошибка автора. Сейчас же единственный способ инициализировать приватное свойство - в конструкторе.


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
ДобренькийПапаша
Дата 3.10.2009, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Ничего себе)))
Мда, это новость для меня. Я такой конструкции вообще никогда не видел)))


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0636 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.