Информация об изменениях

Сообщение Re[5]: А что если убрать new в C# ? от 29.08.2023 12:57

Изменено 29.08.2023 13:02 CRT

Re[5]: А что если убрать new в C# ?
Здравствуйте, Serginio1, Вы писали:


S>Есть https://sergworks.wordpress.com/2012/03/13/record-constructors-in-delphi/


а, ну значит я отстал. Давно дельфи не занимался. Раньше не было.

Изначально (и очень долгое время) в дельфи все классы создавались только динамически (в куче). У структур конструкторов не было.
Create именно создавал объект в куче и возвращал ссылку.
поэтому вызов
v:=TMyClass.Create;
выглядел логически. Ты создаешь объект инициализируя его попутно, и возвращаешь ссылку, которую присваиваешь переменной которая будет хранить эту ссылку. Поэтому и назвали конструктор словом Create (хотя насколько помню имя может быть любое)


Потом они решили присобачить к структурам конструктор. И решили оставить синтаксис таким же как и при создание объектов в динамической памяти (в куче). То есть и название конструктора и оператор присваивания.
То есть та же самая шляпа что и в C#


Кстати раньше в Turbo Pascal был другой синтаксис, без оператора присваивания, и конструкторы было принято называть Init а деструкторы Done

выглядело это так
var 
 s: TMyClass;
begin
  s.Init;
  s.Done;
end;
Re[5]: А что если убрать new в C# ?
Здравствуйте, Serginio1, Вы писали:


S>Есть https://sergworks.wordpress.com/2012/03/13/record-constructors-in-delphi/


а, ну значит я отстал. Давно дельфи не занимался. Раньше не было.

Изначально (и очень долгое время) в дельфи все классы создавались только динамически (в куче). У структур конструкторов не было.
Create именно создавал объект в куче и возвращал ссылку.
поэтому вызов
v:=TMyClass.Create;
выглядел логически. Ты создаешь объект инициализируя его попутно, и возвращаешь ссылку, которую присваиваешь переменной которая будет хранить эту ссылку. Поэтому и назвали конструктор словом Create (хотя насколько помню имя может быть любое)


Потом они решили присобачить к структурам конструктор. И решили оставить синтаксис таким же как и при создание объектов в динамической памяти (в куче). То есть и название конструктора и оператор присваивания.
То есть та же самая шляпа что и в C#


Кстати раньше в Turbo Pascal был другой синтаксис, без оператора присваивания, и конструкторы было принято называть Init а деструкторы Done

выглядело это так
var 
 s: TMyClass;
begin
  s.Init;
  s.Done;
end.