|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
терминологически понятно - первое это поле, второе - свойство, которое при компиляции превращается в две функции. В чём преимущество пустого свойства перед полем? Тем более, что я всё равно не смогу ничего ни в get{} ни в set{} вписать, пока опять-таки не объявлю какую-нибудь переменную int _field (пока get/set пустые, то Field "сама" хранит в себе значения), т.к. при "расшифровке" get или set Field сразу теряет способность хранить данные в себе и их нужно куда-то пихать (или я ошибаюсь?) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2016, 23:37 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Charles WeylandВ чём преимущество пустого свойства перед полем? 1. Если захочется добавить логику и преобразовать поле в свойство, то придётся перекомпилировать вызывающий код. Если такая возможность есть, то это некритично - например, когда поле или класс описаны как private или internal. 2. Есть разница на уровне рефлекшена. Как следствие, не каждый сериализатор, датабиндинг и т. п. умеет работать с полями из-за лени их создателей. зы: В древности люди считали, что по ряду причин не должно быть публичных полей классов. Некоторые до сих пор так считают. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 04:47 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
3. Свойство может быть объявлено в интерфейсе, поле - нет. 4. Свойства могут быть виртуальными, и, как следствие, переопределенными в производном классе. Поля - нет. 5. Датабиндинги (и в WPF, и в винформс) работают именно через свойства, а не через поля. 6. Поле класса может быть передано в метод как ref/out параметр, свойство - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 06:13 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Charles Weyland, Для авто-свойства компилятор сгенерирует приватное поле и назовёт его как ему вздумается. Поэтому есть вероятность, что ты получишь фейл, при десериализации. Крайне редкий и специфичный случай, который может неожиданно огорчить =) Некоторые Рихтеры считают, что свойства это результат плохого дизайна. Но практика программирования и эволюция дисциплины показывает, что наоборот, публичных полей вообще не должно быть, только свойства. Самое главное, о чём уже выше сказали, но я повторю: поле не может быть объявлено в интерфейсе, а свойство может . ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 08:12 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
hVosttДля авто-свойства компилятор сгенерирует приватное поле и назовёт его как ему вздумается. Поэтому есть вероятность, что ты получишь фейл, при десериализации. Крайне редкий и специфичный случай, который может неожиданно огорчить =)Все известные науке сериализаторы игнорируют приватные члены. Ну может если только их явно атрибутом каким пометить. Что же там такое ужасное может случиться? Давай пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 08:42 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Алексей К, 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 . ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 09:24 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
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 почему-то пишет приватные поля. Нажно всем отказываться от автосвойств... :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 09:57 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
*Нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 09:59 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Алексей КНу да, древний BinaryFormatter почему-то пишет приватные поля. Нажно всем отказываться от автосвойств... :-) Ну по сути это как раз и есть честный сериализер. Все другие, о которых ты говоришь, никак не гарантируют, что сериализованные данные будут идентичны десериализованным хоть в какой-то мере. Любое свойство может намерянно или нет искажать данные. О чём собственно и говорил Рихтер. Правда как оказалось не так страшен чёрт, как его малюют, но это делает ситуацию ещё более опасной ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 10:11 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
hVosttАлексей КНу да, древний BinaryFormatter почему-то пишет приватные поля. Нажно всем отказываться от автосвойств... :-) Ну по сути это как раз и есть честный сериализер. Все другие, о которых ты говоришь, никак не гарантируют, что сериализованные данные будут идентичны десериализованным хоть в какой-то мере. Любое свойство может намерянно или нет искажать данные. О чём собственно и говорил Рихтер. Правда как оказалось не так страшен чёрт, как его малюют, но это делает ситуацию ещё более опасной Никакой опасности для тех, кто не нарушает концепцию свойств и понимает, что в них должно находиться. :-) С другой стороны, BinaryFormatter пользуется не публичным контрактом класса, как принято в приличном обществе, он лезет в святая святых - в приватные поля, из-за чего и работает неправильно при некоторых, вполне законных , изменениях внутренностей класса. Авторы BinaryFormatter должны признать свои ошибки и сделать что-нибудь хорошее, чтобы загладить вину перед обществом. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 10:18 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Сон Веры Павловны, 7. К полю можно применить ThreadStaticAttribute 8. К полю можно применить volatile ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 10:41 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Алексей КНикакой опасности для тех, кто не нарушает концепцию свойств и понимает, что в них должно находиться. :-) Согласен, культура использования свойств хорошо сформировалась. Алексей КС другой стороны, BinaryFormatter пользуется не публичным контрактом класса, как принято в приличном обществе, он лезет в святая святых - в приватные поля, из-за чего и работает неправильно при некоторых, вполне законных , изменениях внутренностей класса. Авторы BinaryFormatter должны признать свои ошибки и сделать что-нибудь хорошее, чтобы загладить вину перед обществом. В некоторых случаях это идеальный вариант. Например, сериализация исключений. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 11:16 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
hVosttАлексей КС другой стороны, BinaryFormatter пользуется не публичным контрактом класса, как принято в приличном обществе, он лезет в святая святых - в приватные поля, из-за чего и работает неправильно при некоторых, вполне законных , изменениях внутренностей класса. Авторы BinaryFormatter должны признать свои ошибки и сделать что-нибудь хорошее, чтобы загладить вину перед обществом. В некоторых случаях это идеальный вариант. Например, сериализация исключений.ОК. Подумаю об этом. Но на первый взгляд похоже на авантюру. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 11:32 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Алексей КОК. Подумаю об этом. Но на первый взгляд похоже на авантюру. :-) Насчёт авантюры согласен, замахнулись не подумав. С бинарной сериализацией связано целое корыто проблем, поэтому и не обрело популярности. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 11:36 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
hVosttАлексей КОК. Подумаю об этом. Но на первый взгляд похоже на авантюру. :-) Насчёт авантюры согласен, замахнулись не подумав. С бинарной сериализацией связано целое корыто проблем, поэтому и не обрело популярности.Бинарные сериализаторы разные бывают. В WCF есть бинарный сериализатор, который нормально работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 12:40 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Алексей КБинарные сериализаторы разные бывают. В WCF есть бинарный сериализатор, который нормально работает. Медленный он... если если ты конечно имеешь в виду BinaryFormatter. Лучше ProtoBuf =) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2016, 13:06 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
hVosttАлексей КБинарные сериализаторы разные бывают. В WCF есть бинарный сериализатор, который нормально работает. Медленный он... если если ты конечно имеешь в виду BinaryFormatter. Лучше ProtoBuf =)Ну я про сериализатор, используемый в привязке WCF NetTCP. С чего он медленный-то? Да и мы разве куда-то не успеваем? :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 04:15 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Алексей КhVosttпропущено... Медленный он... если если ты конечно имеешь в виду BinaryFormatter. Лучше ProtoBuf =)Ну я про сериализатор, используемый в привязке WCF NetTCP. С чего он медленный-то? Не тестировал, но скорее всего из-за рефлексии. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 08:01 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Ну я про сериализатор, используемый в привязке WCF NetTCP. С чего он медленный-то? Не тестировал, но скорее всего из-за рефлексии.Ну там, если всё по уму написано, должна быть кодогенерация через Emit или Expression. Но я тоже не тестировал. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 08:12 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Не тестировал, но скорее всего из-за рефлексии.Ну там, если всё по уму написано, должна быть кодогенерация через Emit или Expression. Но я тоже не тестировал. :-) Ты хотел сказать, если написать самому генерацию суррогата для каждого класса, что необходимо сериализовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 08:23 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Ну там, если всё по уму написано, должна быть кодогенерация через Emit или Expression. Но я тоже не тестировал. :-) Ты хотел сказать, если написать самому генерацию суррогата для каждого класса, что необходимо сериализовать?Ну нет. Я про кодогенерацию внутри сериализатора, как в XmlSerializer. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 08:42 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Алексей КskyANAпропущено... Ты хотел сказать, если написать самому генерацию суррогата для каждого класса, что необходимо сериализовать?Ну нет. Я про кодогенерацию внутри сериализатора, как в XmlSerializer. А она появилась для Binary? Раньше помнится самому надо было писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 09:15 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Алексей КЯ про кодогенерацию внутри сериализатора, как в XmlSerializer. Кхм... может, лучше не надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 09:19 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
skyANAАлексей Кпропущено... Ну нет. Я про кодогенерацию внутри сериализатора, как в XmlSerializer. А она появилась для Binary? Раньше помнится самому надо было писать.Ну в WCF в сериализаторе для NetTCP может и есть, надо уточнять. Могу ошибаться конечно же. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 09:31 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныАлексей КЯ про кодогенерацию внутри сериализатора, как в 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 09:39 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Что мешает реализовать ISerializable если надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 10:26 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
ЕвгенийВЧто мешает реализовать ISerializable если надо? Надо что? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 14:41 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
skyANAНадо что? Надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 14:48 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Charles WeylandskyANAНадо что? Надо. Если надо, то ничего. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 14:54 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
мне кажется, сточки 3рения элементарно удобства предоставляемого компилятором и IDE исполь3овать свойства на много лучше. в 6 версии свойства можно инициали3ировать, сделать R/O и т.д. на много проще. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 15:51 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
skyANAЕвгенийВЧто мешает реализовать ISerializable если надо? Надо что? Сериализацию, отличную от из коробки? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 17:03 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
ЕвгенийВISerializable Отличную от из коробки не надо. Надо чтобы быстрее работала. Для того же ProtoBuf тоже можно атрибуты использовать, но это будет медленнее, чем сгенерировать дтошки. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 17:16 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
skyANAОтличную от из коробки не надо. Надо чтобы быстрее работала. Ну типичная позиция юзверя, который мечтает о приложении с единственной кнопкой "Сделать хорошо". Но чудес то не бывает! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 20:02 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
ЕвгенийВskyANAОтличную от из коробки не надо. Надо чтобы быстрее работала. Ну типичная позиция юзверя, который мечтает о приложении с единственной кнопкой "Сделать хорошо". Но чудес то не бывает! О чем ты вообще? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 20:58 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
ЕвгенийВskyANAОтличную от из коробки не надо. Надо чтобы быстрее работала. Ну типичная позиция юзверя, который мечтает о приложении с единственной кнопкой "Сделать хорошо". Но чудес то не бывает! Што? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2016, 22:06 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
skyANAЕвгенийВпропущено... Ну типичная позиция юзверя, который мечтает о приложении с единственной кнопкой "Сделать хорошо". Но чудес то не бывает! О чем ты вообще? О том, что палка о двух концах. С одной стороны нужно быстро. С другой, не каждый класс можно сериализовать, например трудности с Expression<TDelegate> или Thread. И нужно постараться, что бы как можно больше типов были подвержены сериализации, там что бы разрулить например одни циклические ссылки, нужно здорово постараться, сложность не меньше, чем у GC получиться. На написание сериализатора тратить столько не оправдано. Вот и дано, хочешь используй стандартный, не хочешь - пиши кастомный. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2016, 10:58 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
ЕвгенийВО том, что палка о двух концах. Дом о двух этажах, асфальт о двух трамвайных путях. хех, одесское наречие в на форуме процветает. (и не надо одесское наречие называть старорусским, никакое оно не старорусское. Обыкновенная безграмотная фраза) P.s. по-русски "о двух концах палки", если интересно P.p.s. пардон, глаза режут подобные фразы, вот и прицепился) а по делу всё верно говоришь, я считаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2016, 11:11 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
ЕвгенийВskyANAпропущено... О чем ты вообще? О том, что палка о двух концах. С одной стороны нужно быстро. С другой, не каждый класс можно сериализовать, например трудности с Expression<TDelegate> или Thread. И нужно постараться, что бы как можно больше типов были подвержены сериализации, там что бы разрулить например одни циклические ссылки, нужно здорово постараться, сложность не меньше, чем у GC получиться. На написание сериализатора тратить столько не оправдано. Вот и дано, хочешь используй стандартный, не хочешь - пиши кастомный.Не надо бездумно в одном классе смешивать логику и данные, тогда не будет никаких палок с концами. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2016, 11:23 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Charles Weyland, У мядаль два сторона! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2016, 11:47 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Алексей КНе надо бездумно в одном классе смешивать логику и данные, тогда не будет никаких палок с концами. Это всё притянутые за уши концы палок )) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2016, 11:48 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Алексей КНе надо бездумно в одном классе смешивать логику и данные, тогда не будет никаких палок с концами. А если к примеру данные задачи идеально укладываются на ориентированный граф, в узлах которого очереди с приоритетами, элементами которых являются красно-черные деревья? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2016, 11:52 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
Charles WeylandP.s. по-русски "о двух концах палки", если интересно P.p.s. пардон, глаза режут подобные фразы, вот и прицепился) а по делу всё верно говоришь, я считаю. Крылатая фразу сохраняет устаревшее употребление предлога «о». Претензии абсолютно бездушны и безосновательны. Правильно употреблять эту фразу именно так, как она сохранилась, происки надмозга следует немедленно утилизировать и душить в зародыше. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2016, 11:54 |
|
В чем принципиальная разница между public int Field; и public int Field{get;set;}?
|
|||
---|---|---|---|
#18+
ЕвгенийВА если к примеру данные задачи идеально укладываются на ориентированный граф, в узлах которого очереди с приоритетами, элементами которых являются красно-черные деревья? И что мешает здесь логику отделить от данных? Не понимать. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2016, 11:56 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1400281]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 158ms |
0 / 0 |