|
В чем принципиальная разница между 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 |
|
|
start [/forum/topic.php?fid=20&fpage=53&tid=1400281]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
78ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 188ms |
0 / 0 |