powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / В чем принципиальная разница между public int Field; и public int Field{get;set;}?
25 сообщений из 44, страница 1 из 2
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39327899
Charles Weyland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
терминологически понятно - первое это поле, второе - свойство, которое при компиляции превращается в две функции.
В чём преимущество пустого свойства перед полем?

Тем более, что я всё равно не смогу ничего ни в get{} ни в set{} вписать, пока опять-таки не объявлю какую-нибудь переменную int _field (пока get/set пустые, то Field "сама" хранит в себе значения), т.к. при "расшифровке" get или set Field сразу теряет способность хранить данные в себе и их нужно куда-то пихать (или я ошибаюсь?)
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39327920
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles WeylandВ чём преимущество пустого свойства перед полем?
1. Если захочется добавить логику и преобразовать поле в свойство, то придётся перекомпилировать вызывающий код. Если такая возможность есть, то это некритично - например, когда поле или класс описаны как private или internal.

2. Есть разница на уровне рефлекшена. Как следствие, не каждый сериализатор, датабиндинг и т. п. умеет работать с полями из-за лени их создателей.

зы: В древности люди считали, что по ряду причин не должно быть публичных полей классов. Некоторые до сих пор так считают.
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39327926
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3. Свойство может быть объявлено в интерфейсе, поле - нет.
4. Свойства могут быть виртуальными, и, как следствие, переопределенными в производном классе. Поля - нет.
5. Датабиндинги (и в WPF, и в винформс) работают именно через свойства, а не через поля.
6. Поле класса может быть передано в метод как ref/out параметр, свойство - нет.
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39327945
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Charles Weyland,

Для авто-свойства компилятор сгенерирует приватное поле и назовёт его как ему вздумается. Поэтому есть вероятность, что ты получишь фейл, при десериализации. Крайне редкий и специфичный случай, который может неожиданно огорчить =)

Некоторые Рихтеры считают, что свойства это результат плохого дизайна. Но практика программирования и эволюция дисциплины показывает, что наоборот, публичных полей вообще не должно быть, только свойства.

Самое главное, о чём уже выше сказали, но я повторю: поле не может быть объявлено в интерфейсе, а свойство может .
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39327950
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДля авто-свойства компилятор сгенерирует приватное поле и назовёт его как ему вздумается. Поэтому есть вероятность, что ты получишь фейл, при десериализации. Крайне редкий и специфичный случай, который может неожиданно огорчить =)Все известные науке сериализаторы игнорируют приватные члены. Ну может если только их явно атрибутом каким пометить. Что же там такое ужасное может случиться? Давай пример.
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39327970
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К,

http://www.infragistics.com/community/blogs/josh_smith/archive/2008/02/05/automatic-properties-and-the-binaryformatter.aspx

автор
I think a good rule of thumb is: do not use automatic properties in serializable types .
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39327987
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей К,

http://www.infragistics.com/community/blogs/josh_smith/archive/2008/02/05/automatic-properties-and-the-binaryformatter.aspx

авторI think a good rule of thumb is: do not use automatic properties in serializable types .

Ну да, древний BinaryFormatter почему-то пишет приватные поля. Нажно всем отказываться от автосвойств... :-)
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39327989
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*Нужно
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328002
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНу да, древний BinaryFormatter почему-то пишет приватные поля. Нажно всем отказываться от автосвойств... :-)

Ну по сути это как раз и есть честный сериализер. Все другие, о которых ты говоришь, никак не гарантируют, что сериализованные данные будут идентичны десериализованным хоть в какой-то мере. Любое свойство может намерянно или нет искажать данные. О чём собственно и говорил Рихтер. Правда как оказалось не так страшен чёрт, как его малюют, но это делает ситуацию ещё более опасной
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328012
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КНу да, древний BinaryFormatter почему-то пишет приватные поля. Нажно всем отказываться от автосвойств... :-)

Ну по сути это как раз и есть честный сериализер. Все другие, о которых ты говоришь, никак не гарантируют, что сериализованные данные будут идентичны десериализованным хоть в какой-то мере. Любое свойство может намерянно или нет искажать данные. О чём собственно и говорил Рихтер. Правда как оказалось не так страшен чёрт, как его малюют, но это делает ситуацию ещё более опасной Никакой опасности для тех, кто не нарушает концепцию свойств и понимает, что в них должно находиться. :-)

С другой стороны, BinaryFormatter пользуется не публичным контрактом класса, как принято в приличном обществе, он лезет в святая святых - в приватные поля, из-за чего и работает неправильно при некоторых, вполне законных , изменениях внутренностей класса. Авторы BinaryFormatter должны признать свои ошибки и сделать что-нибудь хорошее, чтобы загладить вину перед обществом.
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328030
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,
7. К полю можно применить ThreadStaticAttribute
8. К полю можно применить volatile
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328053
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КНикакой опасности для тех, кто не нарушает концепцию свойств и понимает, что в них должно находиться. :-)

Согласен, культура использования свойств хорошо сформировалась.

Алексей КС другой стороны, BinaryFormatter пользуется не публичным контрактом класса, как принято в приличном обществе, он лезет в святая святых - в приватные поля, из-за чего и работает неправильно при некоторых, вполне законных , изменениях внутренностей класса. Авторы BinaryFormatter должны признать свои ошибки и сделать что-нибудь хорошее, чтобы загладить вину перед обществом.

В некоторых случаях это идеальный вариант. Например, сериализация исключений.
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328062
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КС другой стороны, BinaryFormatter пользуется не публичным контрактом класса, как принято в приличном обществе, он лезет в святая святых - в приватные поля, из-за чего и работает неправильно при некоторых, вполне законных , изменениях внутренностей класса. Авторы BinaryFormatter должны признать свои ошибки и сделать что-нибудь хорошее, чтобы загладить вину перед обществом.

В некоторых случаях это идеальный вариант. Например, сериализация исключений.ОК. Подумаю об этом. Но на первый взгляд похоже на авантюру. :-)
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328065
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КОК. Подумаю об этом. Но на первый взгляд похоже на авантюру. :-)

Насчёт авантюры согласен, замахнулись не подумав. С бинарной сериализацией связано целое корыто проблем, поэтому и не обрело популярности.
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328122
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КОК. Подумаю об этом. Но на первый взгляд похоже на авантюру. :-)

Насчёт авантюры согласен, замахнулись не подумав. С бинарной сериализацией связано целое корыто проблем, поэтому и не обрело популярности.Бинарные сериализаторы разные бывают. В WCF есть бинарный сериализатор, который нормально работает.
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328137
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КБинарные сериализаторы разные бывают. В WCF есть бинарный сериализатор, который нормально работает.

Медленный он... если если ты конечно имеешь в виду BinaryFormatter. Лучше ProtoBuf =)
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328624
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КБинарные сериализаторы разные бывают. В WCF есть бинарный сериализатор, который нормально работает.

Медленный он... если если ты конечно имеешь в виду BinaryFormatter. Лучше ProtoBuf =)Ну я про сериализатор, используемый в привязке WCF NetTCP. С чего он медленный-то? Да и мы разве куда-то не успеваем? :-)
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328654
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КhVosttпропущено...


Медленный он... если если ты конечно имеешь в виду BinaryFormatter. Лучше ProtoBuf =)Ну я про сериализатор, используемый в привязке WCF NetTCP. С чего он медленный-то?
Не тестировал, но скорее всего из-за рефлексии.
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328656
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Ну я про сериализатор, используемый в привязке WCF NetTCP. С чего он медленный-то?
Не тестировал, но скорее всего из-за рефлексии.Ну там, если всё по уму написано, должна быть кодогенерация через Emit или Expression. Но я тоже не тестировал. :-)
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328660
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...

Не тестировал, но скорее всего из-за рефлексии.Ну там, если всё по уму написано, должна быть кодогенерация через Emit или Expression. Но я тоже не тестировал. :-)
Ты хотел сказать, если написать самому генерацию суррогата для каждого класса, что необходимо сериализовать?
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328665
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Ну там, если всё по уму написано, должна быть кодогенерация через Emit или Expression. Но я тоже не тестировал. :-)
Ты хотел сказать, если написать самому генерацию суррогата для каждого класса, что необходимо сериализовать?Ну нет. Я про кодогенерацию внутри сериализатора, как в XmlSerializer.
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328684
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...

Ты хотел сказать, если написать самому генерацию суррогата для каждого класса, что необходимо сериализовать?Ну нет. Я про кодогенерацию внутри сериализатора, как в XmlSerializer.
А она появилась для Binary? Раньше помнится самому надо было писать.
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328688
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КЯ про кодогенерацию внутри сериализатора, как в XmlSerializer.
Кхм... может, лучше не надо?
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328697
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAАлексей Кпропущено...
Ну нет. Я про кодогенерацию внутри сериализатора, как в XmlSerializer.
А она появилась для Binary? Раньше помнится самому надо было писать.Ну в WCF в сериализаторе для NetTCP может и есть, надо уточнять. Могу ошибаться конечно же.
...
Рейтинг: 0 / 0
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
    #39328704
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныАлексей КЯ про кодогенерацию внутри сериализатора, как в XmlSerializer.
Кхм... может, лучше не надо?Возможные утечки памяти описаны в документации . Просто не все её читают.
авторTo increase performance, the XML serialization infrastructure dynamically generates assemblies to serialize and deserialize specified types. The infrastructure finds and reuses those assemblies. This behavior occurs only when using the following constructors:

XmlSerializer.XmlSerializer(Type)

XmlSerializer.XmlSerializer(Type, String)

If you use any of the other constructors, multiple versions of the same assembly are generated and never unloaded, which results in a memory leak and poor performance. The easiest solution is to use one of the previously mentioned two constructors. Otherwise, you must cache the assemblies in a Hashtable, as shown in the following example.
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / В чем принципиальная разница между public int Field; и public int Field{get;set;}?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]