Хочу нокопаться до правды
От: 3axapov  
Дата: 29.03.06 05:54
Оценка:
Уже безотносительно возникающих в связи с этим проблем посторю вопрос:
Зачем запретили переопределение оператора присваивания?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Хочу нокопаться до правды
От: Damat_AE Украина  
Дата: 29.03.06 06:18
Оценка:
Здравствуйте, 3axapov, Вы писали:

3>Уже безотносительно возникающих в связи с этим проблем посторю вопрос:

3>Зачем запретили переопределение оператора присваивания?

Блин, меня самого это немного бесит, ведь можна прикольно мутиться его перегружая.

По крайней мере можна обойтись определением неявного преобразования типов: public static implicit operator
Re: Хочу нокопаться до правды
От: Mab Россия http://shade.msu.ru/~mab
Дата: 29.03.06 06:26
Оценка: +2
Здравствуйте, 3axapov, Вы писали:

Видимо потому, что в язык нужно включать не все фичи, которые потенциально могут быть реализованы и кому-то понадобиться, а существенно меньший набор.

Относительно самого оператора -- за четыре года работы с .NET лично у меня такой необходимости не было Может у меня задачи не типичные, конечно.
Re[2]: Хочу нокопаться до правды
От: ie Россия http://ziez.blogspot.com/
Дата: 29.03.06 06:51
Оценка:
Здравствуйте, Mab, Вы писали:

Mab>Относительно самого оператора -- за четыре года работы с .NET лично у меня такой необходимости не было Может у меня задачи не типичные, конечно.


Аналогичная ситуация, всегда хватало стандартного присваивания + IClonable.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Превратим окружающую нас среду в воскресенье.
Re: Хочу нокопаться до правды
От: TK Лес кывт.рф
Дата: 29.03.06 06:54
Оценка:
Hello, "3axapov"
> Уже безотносительно возникающих в связи с этим проблем посторю вопрос:
> Зачем запретили переопределение оператора присваивания?

Я так понимаю, что очень хочется иметь возможность писать на C# что-то
подобное коду на C++?
class A
{
public:
 // т.к. все классы в .net создаются в хипе то, фактически это указатели.
 A* operator= (A* original)
 {
  return nullptr;
 }
};


Если очень хочется изменить поведение оператора присваивания то, это можно
имитировать через неявное приведение типа.
Posted via RSDN NNTP Server 2.0
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Хочу нокопаться до правды
От: prVovik Россия  
Дата: 29.03.06 06:56
Оценка: +1
Здравствуйте, Mab, Вы писали:

Mab>Здравствуйте, 3axapov, Вы писали:


Mab>Видимо потому, что в язык нужно включать не все фичи, которые потенциально могут быть реализованы и кому-то понадобиться, а существенно меньший набор.


Mab>Относительно самого оператора -- за четыре года работы с .NET лично у меня такой необходимости не было Может у меня задачи не типичные, конечно.


Оператор присваивания, как впрочем и остальные операторы, перегрузка которых таки реальзована, относятся к категории синтаксического сахара. Вообще, очень много привычных вещей, которыми с удовольствием пользуются, можно отнести к этой категории. Особенность синтаксического сахара заключается в том, что без него почти всегда можно легко обходиться, до тех пор, пока не начнешь им пользоваться Тут как раз тот случай, когда говорят, что аппетит приходит во время еды
лэт ми спик фром май харт
Re[3]: Хочу нокопаться до правды
От: Mab Россия http://shade.msu.ru/~mab
Дата: 29.03.06 07:02
Оценка:
Здравствуйте, prVovik, Вы писали:

Это все понятно. Но от избытка сахара диабет бывает Лично мне приятно, что когда я пишу a = b для ссылочных типов, это означает ровно то, что написано -- присваивание ссылок, а некий посторонний вызов, который, что-то там сделает в стороне и незаметно.

Опять же, допускаю, что есть задачи, сплошняком состоящие из таких присваиваний с побочным эффектом. Но почему-то мне они кажутся довольно редкими. Что делать, если встретится: менять инструмент, смириться и писать вызовы методов или, наконец, пересмотреть дизайн, подогнав его под способности языка.
Re[3]: Хочу нокопаться до правды
От: Damat_AE Украина  
Дата: 29.03.06 08:41
Оценка:
Здравствуйте, ie, Вы писали:

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


Mab>>Относительно самого оператора -- за четыре года работы с .NET лично у меня такой необходимости не было Может у меня задачи не типичные, конечно.


ie>Аналогичная ситуация, всегда хватало стандартного присваивания + IClonable.


Ха, и чем же хватает IClonable, если он возвращает долбаный object — ну во втором наверное уже есть генерик интерфейс.

Думаю, для ответа на даный вопрос нужно перечислить ситуации — когда оправдано применение даного опреатора. Если таких нет, или они реализуются стандартными способами, не теряя при этом легкости и удобства — тогда он точно не нужен
Re: Хочу нокопаться до правды
От: MatFiz Россия  
Дата: 29.03.06 08:48
Оценка:
Здравствуйте, 3axapov, Вы писали:

3>Уже безотносительно возникающих в связи с этим проблем посторю вопрос:

3>Зачем запретили переопределение оператора присваивания?

Если перегрузить оператор присваивания, возникнет конфликт с пропертями.
Не понятно, что нужно вызывать — сеттер или перегруженный оператор.
ИМХО, наличие пропертей значительно полезнее перегрузки оператора присваивания (весь фреймворк на пропертях работает).
How are YOU doin'?
Re[4]: Хочу нокопаться до правды
От: ie Россия http://ziez.blogspot.com/
Дата: 29.03.06 08:50
Оценка:
Здравствуйте, Damat_AE, Вы писали:

ie>>Аналогичная ситуация, всегда хватало стандартного присваивания + IClonable.


D_A>Ха, и чем же хватает IClonable, если он возвращает долбаный object — ну во втором наверное уже есть генерик интерфейс.


А что приведение типов уже отменили?

D_A>Думаю, для ответа на даный вопрос нужно перечислить ситуации — когда оправдано применение даного опреатора. Если таких нет, или они реализуются стандартными способами, не теряя при этом легкости и удобства — тогда он точно не нужен


Так приведи эти самые ситуации — когда оправдано применение данного оператора, тогда и попробуем предложить решение без применения такового.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Превратим окружающую нас среду в воскресенье.
Re[2]: Хочу нокопаться до правды
От: prVovik Россия  
Дата: 29.03.06 08:53
Оценка:
Здравствуйте, MatFiz, Вы писали:

MF>Если перегрузить оператор присваивания, возникнет конфликт с пропертями.

MF>Не понятно, что нужно вызывать — сеттер или перегруженный оператор.
Ну пускай всегда бы выполнялся сеттер. А внутри сеттера уже можно оператор дергать. Пока что не вижу проблемы
лэт ми спик фром май харт
Re[5]: Хочу нокопаться до правды
От: prVovik Россия  
Дата: 29.03.06 08:55
Оценка:
Здравствуйте, ie, Вы писали:

ie>А что приведение типов уже отменили?

очень удобно и безопасно!!!
лэт ми спик фром май харт
Re[6]: Хочу нокопаться до правды
От: Mab Россия http://shade.msu.ru/~mab
Дата: 29.03.06 08:59
Оценка:
Здравствуйте, prVovik, Вы писали:

V>очень удобно и безопасно!!!

Что мешает написать дженерик-версию данного интерфейса?
Re[7]: Хочу нокопаться до правды
От: prVovik Россия  
Дата: 29.03.06 09:00
Оценка:
Здравствуйте, Mab, Вы писали:

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


V>>очень удобно и безопасно!!!

Mab>Что мешает написать дженерик-версию данного интерфейса?
недоступность второго фреймворка
лэт ми спик фром май харт
Re[6]: Хочу нокопаться до правды
От: ie Россия http://ziez.blogspot.com/
Дата: 29.03.06 09:05
Оценка: +1
Здравствуйте, prVovik, Вы писали:

ie>>А что приведение типов уже отменили?

V>очень удобно и безопасно!!!
Да в фв1.1 такие очень удобные и безопасные вещи на каждом шагу и закрывать глаза на все остальное и жаловаться на IClonable это уже слишком.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Превратим окружающую нас среду в воскресенье.
Re[7]: Хочу нокопаться до правды
От: Damat_AE Украина  
Дата: 29.03.06 09:31
Оценка:
Здравствуйте, ie, Вы писали:

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


ie>>>А что приведение типов уже отменили?

V>>очень удобно и безопасно!!!
ie>Да в фв1.1 такие очень удобные и безопасные вещи на каждом шагу и закрывать глаза на все остальное и жаловаться на IClonable это уже слишком.

Скажу так — наличие операции приведения типов в коде — значит чтото неправильно спроектировано, не так ли?
Еще 1 пример неправильного проектирования — наличие ветвлений в коде — я не говорю про реализацию там математического вычисления, а ветвление по типу например — использование оператора Ис. Все должно разруливаться с помощью:
— полиморфизма;
— паттерн Стэйт;
— паттерн Визитор (двойная диспетчеризация),...

(небольшое отступление)

Сама идея даного интерфейса — нормально подходит для метода клонирования например коллекции данных элементов, но...
Коллекция непонятно что содержит — нетипизированная ведь, непонятно что призойдет вообще. Короче, приведите мне хоть 1 пример оправданого использования даного оператора без приведения типов в итоге...

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

Но все же думаю красивое применение должно найтись сдесь: здесь в разделе Алгоритмы -> Идиомы и стили С++

Просто давно не перечитывал, а так — всем рекомендую почитать
Re: Хочу нокопаться до правды
От: Igor Trofimov  
Дата: 29.03.06 09:37
Оценка: +1 :)
3>Уже безотносительно возникающих в связи с этим проблем посторю вопрос:
3>Зачем запретили переопределение оператора присваивания?

Да не запрещали его!
И не могли запретить. Потому что в C# его никогда и не было!
Re[8]: Хочу нокопаться до правды
От: Mab Россия http://shade.msu.ru/~mab
Дата: 29.03.06 09:48
Оценка:
Здравствуйте, Damat_AE, Вы писали:

D_A>Скажу так — наличие операции приведения типов в коде — значит чтото неправильно спроектировано, не так ли?

Очень категоричное утверждение. Нет, в общем случае не так.

D_A>Еще 1 пример неправильного проектирования — наличие ветвлений в коде — я не говорю про реализацию там математического вычисления, а ветвление по типу например — использование оператора Ис. Все должно разруливаться с помощью:

D_A>- полиморфизма;
D_A>- паттерн Стэйт;
D_A>- паттерн Визитор (двойная диспетчеризация),...
Опять же, кто кому чего должно? is-matching для сред типа .NET или Java вполне устоявшаяся парадигма. В том же Nemerle он вполне удобно поддерживается среди других способов matching-а. Ну а уж что именно применять, зависит от кокретной задачи.

D_A>Но все же думаю красивое применение должно найтись сдесь: здесь в разделе Алгоритмы -> Идиомы и стили С++

У C++ свои порядки и концепции. Скажем, довольно пренебрежительное отношение к RTTI весьма типично для C++-программистов. В .NET Reflection и близкие к нему динамические идеи намного более популярнее.
Re[8]: Хочу нокопаться до правды
От: ie Россия http://ziez.blogspot.com/
Дата: 29.03.06 10:04
Оценка:
Здравствуйте, Damat_AE, Вы писали:

ie>>>>А что приведение типов уже отменили?

V>>>очень удобно и безопасно!!!
ie>>Да в фв1.1 такие очень удобные и безопасные вещи на каждом шагу и закрывать глаза на все остальное и жаловаться на IClonable это уже слишком.

D_A>Скажу так — наличие операции приведения типов в коде — значит чтото неправильно спроектировано, не так ли?


Да, так, но далеко не всегда. В этом случае не так. Когда мы начинаем использовать .NET мы должны соглашаться с правилами которые тот предлагает. Правильно он спроектирован или нет — тут уж никуда не денешься.

D_A>Еще 1 пример неправильного проектирования — наличие ветвлений в коде — я не говорю про реализацию там математического вычисления, а ветвление по типу например — использование оператора Ис. Все должно разруливаться с помощью:

D_A>- полиморфизма;
D_A>- паттерн Стэйт;
D_A>- паттерн Визитор (двойная диспетчеризация),...

Опять же согласен, но это в случае проектирования своих приложений, фрэймвокр какой есть — такой есть. Попробуйте реализовать IComparable для своего объекта без is и приведений.

D_A>(небольшое отступление)


D_A>Сама идея даного интерфейса — нормально подходит для метода клонирования например коллекции данных элементов, но...


Если речь не идет о deep copy, то никакого "но" и не возникает.

D_A>Коллекция непонятно что содержит — нетипизированная ведь, непонятно что призойдет вообще. Короче, приведите мне хоть 1 пример оправданого использования даного оператора без приведения типов в итоге...


Сердце мое полно жалости — я не могу этого сделать. Я вообще не вижу использования IClonable без приведения типа после — оно подразумевается по умолчанию.

D_A>А насчет переопределения оператора присваивания — да, трудно вспомнить надобность его наличия — неявного приведения типов хватает для создания контейнеров прототипов, которые легко можно использовать в контексте некой операции, к параметрам которой неявно могут приводиться эти прототипы — все юнит тесты так работают


D_A>Но все же думаю красивое применение должно найтись сдесь: здесь в разделе Алгоритмы -> Идиомы и стили С++


Когда же наконец-то придет в этот мир понимание о том, что сравнивать ++ и # ну просто нельзя. Разные подходы в программировании на этих языках. И использовать один подход в другом языке, ну просто нельзя.

D_A>Просто давно не перечитывал, а так — всем рекомендую почитать


Спасибо, почитаем, но оставим эти знания до той поры, когда придется писать на плюсах.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Превратим окружающую нас среду в воскресенье.
Re[8]: Хочу нокопаться до правды
От: Damat_AE Украина  
Дата: 29.03.06 11:19
Оценка:
Да я не говорю о плохой архитектуре фрэймворка — именно в своем коде прикольно тогда, если нет операций приведения типов — многие этим пренебрегают, мол если можна, то сделаем. А вообще концепция такова, что таких ситуаций впринципе не должно возникать. Тоесть приведение объекта к типу потомка — а почему так получилось — сдесь получается, что логика, работая с базовым классом знает о потомках — а если добавится еще что-то...
Просто некорректность. Вот с энамами постоянно появляется приведение типов, если восстанавливать его из инта или наоборот. Ну... дождались 2ого фрвк — там можна извращаться с дженериками, а что еще лучше — вложенными в дженерики классами, и всем остальным.

А насчет ++ и # — я не пишу уже давно на ++, и не сравниваю эти языки. Все правильно, в ++ можна легко напороть на рантайм ошибку, но вот кастинги в # — тоже могут приводить к Каст или НулРэференс эксепшнам — тоесть напартачить можна, если злоупотреблять этим оператором. Да, не спорю, всему вина — отсутствие в 1ом фрвк дженериков — может сбоить ФОРИЧ, вдруг чтото не то положили — вся проблема в этом. Тоетсь это практически единственная ситуация, когда возникает кастинг, в иных случаях не должно быть этого. компарэйбл интерфейс — это тоже решится со 2ым фрвк.

Тоетсь, если мы пишем на 2ом фрвк — где нужен кастинг от базового к подтипу?...

А насчет статьи — там довольно прикольные извраты описаны, и их знание ничем не противоречит концепциям шарпа, тк не использует чегото специфического ++. Ну почти все Многое уже реализовано в шарпе схожими вещами, но вообще — статья просто супер!!!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.