Здравствуйте, Shmj, Вы писали:
S>В С++ new имеет смысл, т.к. без него выделяется память на объект в стеке, а new создает в куче и возвращает указатель.
S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Shmj, Вы писали:
S>>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?
IT>И конструктор уровнять в правах с обычным методом.
функцией, и void заменить на Option<T>(Some(T)|None) https://github.com/readme/featured/functional-programming
Можно прямо сейчас, только добавить статик класс с методами-конструкторами
using static Some.Constructors;
var person = Person();
Здравствуйте, Shmj, Вы писали:
S>В С++ new имеет смысл, т.к. без него выделяется память на объект в стеке, а new создает в куче и возвращает указатель.
S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?
Кхм, в Nemerle нет и конструктор просто называется this.
Здравствуйте, Shmj, Вы писали:
S>В С++ new имеет смысл, т.к. без него выделяется память на объект в стеке, а new создает в куче и возвращает указатель. S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?
Ну так со всеми DI контейнерами его и так уже не сыщешь.
Здравствуйте, Разраб, Вы писали:
IT>>И конструктор уровнять в правах с обычным методом. Р>функцией, и void заменить на Option<T>(Some(T)|None) Р>https://github.com/readme/featured/functional-programming Р>Можно прямо сейчас, только добавить статик класс с методами-конструкторами
Это типа как выкривлять кривизну зеркалом с обратной кривизной?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>В текущей грамматике он конфликты разрешает. А если более обще, то сделали чтобы по сравнению с С++ не сильно резало глаз.
Но C++ -ников вводит в заблуждение, т.к. возвращает ссылку а не указатель.
НС>>В текущей грамматике он конфликты разрешает. А если более обще, то сделали чтобы по сравнению с С++ не сильно резало глаз.
S>Но C++ -ников вводит в заблуждение, т.к. возвращает ссылку а не указатель.
S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?
Ну как бы привычно что new это то что выделяет память в куче и возвращают ссылку (или указатель в С++) на это место в памяти. Я к этому привык в C++ и поэтому new в C# мне показалось логичным.
А вот new для структур в C# мне всегда казалось какой-то странной конструкцией. Ссылку не возвращает. Объект в куче не создает.
Да еще и без new можно создавать структуры и использовать. Могли бы для структур в C# использовать с++ный синтаксис вызова конструктора.
Здравствуйте, CRT, Вы писали:
CRT>А вот new для структур в C# мне всегда казалось какой-то странной конструкцией. Ссылку не возвращает. Объект в куче не создает. CRT>Да еще и без new можно создавать структуры и использовать. Могли бы для структур в C# использовать с++ный синтаксис вызова конструктора.
туц это просто конструктор. В том же Delphi это статическтй метод Constructor Create, который кстати может быть и виртуальным!
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>туц это просто конструктор. В том же Delphi это статическтй метод Constructor Create, который кстати может быть и виртуальным!
Еще раз, new это оператор выделения памяти, создания объекта в куче, возвращающий ссылку но созданный объект. В Java, в С++, в C# том же. А для структур в C# они приспособили его только для вызова конструктора и всё — никакой объект в куче не создается, ссылка не возвращается. В этом противоречие. В разном смысле вызова new для структур и классов.
Так понятно о чем я говорю?
А дельфи тут при чем? Как оно к моему комментарию относится? Что, разве в дельфи у record (аналог структур) есть конструктор Create?
S>>туц это просто конструктор. В том же Delphi это статическтй метод Constructor Create, который кстати может быть и виртуальным!
CRT>Еще раз, new это оператор выделения памяти, создания объекта в куче, возвращающий ссылку но созданный объект. В Java, в С++, в C# том же. А для структур в C# они приспособили его только для вызова конструктора и всё — никакой объект в куче не создается, ссылка не возвращается. В этом противоречие. В разном смысле вызова new для структур и классов. CRT>Так понятно о чем я говорю?
CRT>А дельфи тут при чем? Как оно к моему комментарию относится? Что, разве в дельфи у record (аналог структур) есть конструктор Create?
а, ну значит я отстал. Давно дельфи не занимался. Раньше не было.
Изначально (и очень долгое время) в дельфи все классы создавались только динамически (в куче). У структур конструкторов не было.
Create именно создавал объект в куче и возвращал ссылку.
поэтому вызов
v:=TMyClass.Create;
выглядел логически. Ты создаешь объект, попутно его инициализируя, и возвращаешь ссылку, которую присваиваешь переменной которая будет хранить эту ссылку. Поэтому и назвали конструктор словом Create (хотя насколько помню имя может быть любое)
Потом они решили присобачить к структурам конструктор и решили оставить синтаксис вызова конструктора для структур таким же как и при создание объектов в динамической памяти (в куче) — то есть та же самая шляпа что и в C#.
Кстати раньше в Turbo Pascal был другой синтаксис, без оператора присваивания, и конструкторы было принято называть Init а деструкторы Done
выглядело это так при создании на стеке
var
s: TMyClass;
begin
s.Init;
s.Done;
end.
То есть ты только инициализируешь уже существующий на стеке класс
а при динамическом создании объекта выглядело по другому (через new)
Здравствуйте, Shmj, Вы писали:
S>В С++ new имеет смысл, т.к. без него выделяется память на объект в стеке, а new создает в куче и возвращает указатель.
S>В C# этот new никакой смысловой нагрузки не несет. Так зачем же он?
Иначе будет мымрыц при нахождении в области видимости переменной совпадающей с названием класса.
Либо потом блох ловить, либо вообще запретить имена совпадающие с типами. Что при наличии using — боль дырка заднее основание.
Нет уж — пусть будет ясно видно где обьект создаеться — нафиг всех экономистов-оптимизаторов, пусть на питоне с яваскртиптом пришут и там оптимизируют- хуже уже не будет.