Re[20]: property в C#
От: _FRED_ Черногория
Дата: 31.08.07 14:30
Оценка:
Здравствуйте, IT, Вы писали:

IT>Примерно так.


Спасиб! Теперь всё стало ясно и понятно
Help will always be given at Hogwarts to those who ask for it.
Re[12]: property в C#
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 03.09.07 14:38
Оценка:
Здравствуйте, IB, Вы писали:

ANS>>Но раз ты так написал, то вопрос, почему так?

IB>Я не написал, я процитировал.

Понятно.

ANS>> Чем публичное поле отличается от публичного свойства для пользователя контракта (в смысле для программиста, который пользуется объектом)?

IB>Хотя бы метаданными.

Если бы пара гетер/сетер была обязательной, то в этом был бы смысл. А так...

ANS>> Например создаётся событие "свойство такое-то поменялось".

IB>Событие — это не побочный эффект.

Неужто? Зачем же нужны события, в ответ на которые никто ничего не делает?
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[13]: property в C#
От: IB Австрия http://rsdn.ru
Дата: 03.09.07 15:19
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Если бы пара гетер/сетер была обязательной, то в этом был бы смысл.

В этом и так есть смысл.

ANS>Неужто?

Ужто.

ANS> Зачем же нужны события, в ответ на которые никто ничего не делает?

В ответ на события делают снаружи объекта, а не внутри оного.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Мы уже победили, просто это еще не так заметно...
Re[11]: property в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.07 10:22
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Получается, что массив не может быть полем неизменяемого объекта? Или нужен будет ещё и read-only неизменяемый массив?


Если вводить неизменяемость на уровне рантайма, то все базовые структуры обязаны иметь неизменяемые варианты.

_FR>Или, нарпимер, DataSet — он тоже не может быть полем неизменяемого объекта?


Не может.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: property в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.07 10:22
Оценка: +2
Здравствуйте, _FRED_, Вы писали:

_FR>На самом деле предложение VladD2 запретить неизменяемым объектам ссылаться (иметь как поля) изменяемые меня удивила. Выходит, неизменяемые объекты не могут содержать событий, например. То есть резко ограничены по функциональности по сравнению с обычными типами (классами), зато выгодны с точки зрения потребления ресурсов, например. И я пока не вижу, где была бы польза от использования таких объектов


А зачем неизменяемому объекту события? Она же получил свое состояние раз и на всегда. Зачем кого-то оповещать? В прочем, если надо, то нет проблем передатьс ссылки на методы обратной свизи в констурктор.

Есть туча мест где было бы выгодно иметь неизменяемые объекты. И контроль во время компиляции в купе с уменьшением цены владения объектом никому бы не помешал бы. Примеры таких объектов у нас перед глазами: связанные списки (очень часто используются в ФП), строки, бинарные деревья. Неизменяемыми можно было бы сделать шрифты, кисти и другие информационные объекты.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: property в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.07 10:22
Оценка:
Здравствуйте, konsoletyper, Вы писали:

VD>>По идее — нет.


K>На самом деле, да. Ведь ссылка на mutable-объект — это как-бы его identity. Если этот самый identity нельзя изменить, то иммутабельность сохраняется. Например, в Nemerle можно написать


K>
K>controls : list[Control]
K>


K>При этом список останется иммутабельным, у него будет неизменный хэш-код, и он будет эквивалентен другим спискам, содержащим те же контролы в том же порядке (здесь под "те же" имеется в виду равенство идентичностей, а не содержимого).


Это разные вещи. То о чем говоришь ты уже есть и для этого ничего не надо делать. А вот неизменяемые объекты — это немного другое дело.

Бло бы здорово если компилятор бы автоматом проверял бы вложенность и не позволял бы хранить в неизменяемых объектах списки изменяемых, но позволял бы хранить списки неизменяемых.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: property в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.07 10:22
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Поэтому Microsoft должна была реализовать метод Equals типа Object так:

___>
___>public class Object {
___>    public virtual Boolean Equals(Object obj) {
___>        if( obj == null ) return false;

___>        if( this.GetType() != obj.GetType() ) return false;

___>        // Т.к. в System.Object не определены поля, следует считать, что поля равны
___>        return true;
___>    }
___>}
___>

___>...
___>[/q]

Согласен с Синклером. Заявление мягко говоря опрометчивое. По фигу что "в System.Object не определены поля". Ведь метод автоматически наследуется всеми потомками! Это приведет к тому, что всенаследники по умолчанидю получат некорректную реализацию этого метода. А это уже натуральная деверсия.

Сейчас реализация рассчитана на то, что по умолчанию объекткт опеределяется его ссылкой. Разные ссылки == разные объекты. Такое поведение приемлемо для большинства применений (что и показывает практика). Если это поведение неприемлемо, то нужно просто переопределять его.

Так что на мой взгляд Риктер неправ.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: property в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.07 10:22
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Когда такое непонимание встречается у профессионала — это бред и тяжелая наркомания.


Синклер... Что-то ты разошелся.

Это называется — заблуждение. А то и просто "несовпадение мнений".
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: property в C#
От: _FRED_ Черногория
Дата: 05.09.07 10:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Есть туча мест где было бы выгодно иметь неизменяемые объекты…


Да, спасибо. AndrewVK c IT уже мне всё объяснили.

Я понимал под "неизменяемостью" немного другое: запрет на изменение полей класса.
... << RSDN@Home 1.2.0 alpha rev. 717>>
Help will always be given at Hogwarts to those who ask for it.
Re[14]: property в C#
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 05.09.07 10:52
Оценка:
Здравствуйте, IB, Вы писали:

ANS>> Зачем же нужны события, в ответ на которые никто ничего не делает?

IB>В ответ на события делают снаружи объекта, а не внутри оного.

Аа. Изменение состояния не объекта, но всей системы делает эффект не побочным? Понимаю...
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[14]: property в C#
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.09.07 11:10
Оценка: 3 (1) +5 :))) :)
Здравствуйте, VladD2, Вы писали:
VD>Синклер... Что-то ты разошелся.

VD>Это называется — заблуждение. А то и просто "несовпадение мнений".
Заблуждение — это когда, к примеру, Рихтер делает утверждение, оказавшееся ложным. Например, "размер system.IntPtr не зависит от платформы". Ну то есть если он знает, что оно ложное, то это — вранье, а если не знает — то честное заблуждение. (Примечание: Рихтер такого на самом деле не утверждает. Это вымышленный пример.)

А вот очевидно тупиковые решения, из которых последуют массовые неудобства — это бред. Не, ну я могу назвать это как-то политкорректно, например "не вполне продуманные рекомендации", но сути это не изменит.

Ход мысли, приводящий к таким "не вполне продуманным рекомендациям", традиционно называется в нашей русскоязычно-программистской среде "наркоманией".
Я бы мог, опять же, завуалировать мое профессиональное мнение привычной риторикой типа "что курил Рихтер перед этим?", но сути бы это опять же не изменило.

Кроме того, привычный к забористой ругани завсегдатай ФП вряд ли сможет оценить всю глубину моего негодования по поводу данных предложений Рихтера, смягчи я формулировку.
А меня крайне напрягает эта магия имени. Если бы с предложением реализовать дефолтный Equals как проверку на совпадение типа выступил рядовой аноним, его бы тут подняли на смех (и поделом). Но сейчас это предложение обрело священный ореол знаменитого имени — и ты погляди, с каким усердием народ защищает эту дурость! Уже неканонические трактовки сочиняются, мол он не это имел в виду.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[17]: property в C#
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.07 12:00
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Да, спасибо. AndrewVK c IT уже мне всё объяснили.


_FR>Я понимал под "неизменяемостью" немного другое: запрет на изменение полей класса.


Объекта наверное... А что в нем еще что-то можно менять?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: property в C#
От: _FRED_ Черногория
Дата: 05.09.07 12:19
Оценка:
Здравствуйте, VladD2, Вы писали:

_FR>>Я понимал под "неизменяемостью" немного другое: запрет на изменение полей класса.

VD>Объекта наверное...

Конечно

VD>А что в нем еще что-то можно менять?


class A
{
  public object b;
}

class X
{
  A a = new A();
  
  static void Main() {
    X x = new X();
    x.a.b = "aaa"; // здесь поле 'a' объекта 'x' не меняется, а меняется поле 'b' объекта 'x.a'
    x.a = new A(); // а вот тут меняется поле 'a' объекта 'x'
  }
}


Другими словами, я называл "неизменяемым" тип, все поля которого являются "readonly" (в терминах C#), без ограничения того, что типы полей такого типа так же должны быть "неизменяемыми".
... << RSDN@Home 1.2.0 alpha rev. 717>>
Help will always be given at Hogwarts to those who ask for it.
Re[6]: property в C#
От: hell citizen Россия  
Дата: 05.09.07 15:55
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Ага, я решил в своем проекте использовать сборку Васи Пупкина. Где гарантия, что он их использовал по назначению? Уж если даже в самой FCL они не всегда по назначению. Это как с управлением памятью в C/C++ — надо просто ее всегда ее освобождать. Но... не всегда получалось — и память текла. И тогда подумали и сделали .Net и в нем GC. Чуствуешь взаимосвязь?


Если использовать в своих проектах черт-знает-что от черт-знает-кого, то результат будет понятно какой.
Связь между пропертями и управлением памятью не чувстствую...
Re[8]: property в C#
От: hell citizen Россия  
Дата: 05.09.07 16:01
Оценка:
Здравствуйте, _d_m_, Вы писали:

HB>>А где гарантия, что Вася, например, не написал метод get_Something(), который меняет состояние объекта?

___>Гарантии нет, но:
___>
___>...
___>    MyClass c = new MyClass();
___>    int d = c.I;   // то, что здесь меняется состояние объекта "c" уж очень неочевидно
___>    int e = c.get_I();
___>...
___>


Если честно, мне это в обоих случаях не очевидно — меняется оно или нет. Но если клиент должен немедленно реагировать на изменение состояния, то в C# это будет событие. В какую из пар фигурных скобочек при этом заключен код, изменивший состояние, а равно как и то, что перед этими скобочками написано (get, set, get_I() или ещё что) — совершенно не важно.
Re[12]: property в C#
От: EvilChild Ниоткуда  
Дата: 05.09.07 16:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Бло бы здорово если компилятор бы автоматом проверял бы вложенность и не позволял бы хранить в неизменяемых объектах списки изменяемых, но позволял бы хранить списки неизменяемых.

Ещё одно полезное применение неизменяемости это covariant generic parameters — неизменяемые типы дают статическую гарантию безопасности этой фичи.
А то я уже задолбался yield return писать.
now playing: Marcus Meinhardt — Laonda
Re[13]: property в C#
От: Kore Sar  
Дата: 05.09.07 16:53
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Здравствуйте, VladD2, Вы писали:


VD>>Бло бы здорово если компилятор бы автоматом проверял бы вложенность и не позволял бы хранить в неизменяемых объектах списки изменяемых, но позволял бы хранить списки неизменяемых.

EC>Ещё одно полезное применение неизменяемости это covariant generic parameters — неизменяемые типы дают статическую гарантию безопасности этой фичи.
EC>А то я уже задолбался yield return писать.

Можете по подробней описать, при чем тут yield return?
Re[14]: property в C#
От: EvilChild Ниоткуда  
Дата: 05.09.07 17:05
Оценка:
Здравствуйте, Kore Sar, Вы писали:

EC>>Ещё одно полезное применение неизменяемости это covariant generic parameters — неизменяемые типы дают статическую гарантию безопасности этой фичи.

EC>>А то я уже задолбался yield return писать.

KS>Можете по подробней описать, при чем тут yield return?


Например есть IEnumerable<string>, надо вернуть IEnumerable<object>.
Тупо return значение типа IEnumerable<string> из функции с типом возвращаемого значения IEnumerable<object> не прокатит.
Вот yield return единственный известный мне выход.
now playing: Marc Antona & Anthony Collins — AM-PM
Re[2]: property в C#
От: ArtDenis Россия  
Дата: 05.09.07 19:09
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>И что же такого хорошего в этих пропетях? По моему так без них только лучше.


Все сообщения этой темы ниасилил. Не знаю, может кто-нить уже упоминал об этом. Самое главное достоинство пропертей — это то, что их семантика идеально подходит для различных визуальных сред программирования, свойства объектов которых радактируются в проперти-гридах. Скрытие чтение и записи под одним именем свойства позволяет одновременно видеть значение свойства в проперти-гриде и при необходимости изменять его:
*-----------*------------*
| Caption   | Window cap |
*-----------*------------*
| Left      | 253        |
*-----------*------------*


Представим себе, что мы бы отказались от пропертей. Тогда таблица свойств объекта получилась бы примерно такой:
*--------------*------------*
| SetCaption   |            |
*--------------*------------*
| GetCaption   | Window cap |
*--------------*------------*
| GetLeft      |            |
*--------------*------------*
| SetLeft      | 253        |
*--------------*------------*

А это неудобно и не наглядно
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[15]: property в C#
От: Kore Sar  
Дата: 05.09.07 20:51
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Здравствуйте, Kore Sar, Вы писали:


EC>>>Ещё одно полезное применение неизменяемости это covariant generic parameters — неизменяемые типы дают статическую гарантию безопасности этой фичи.

EC>>>А то я уже задолбался yield return писать.

KS>>Можете по подробней описать, при чем тут yield return?


EC>Например есть IEnumerable<string>, надо вернуть IEnumerable<object>.

EC>Тупо return значение типа IEnumerable<string> из функции с типом возвращаемого значения IEnumerable<object> не прокатит.
EC>Вот yield return единственный известный мне выход.

А преобразовать к необходимому типу?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.