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

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

Изменено 29.08.2023 13:26 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.


То есть ты только инициализируешь уже существующий на стеке класс

а при динамическом создании объекта выглядело по другому (через new)
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.


То есть ты только инициализируешь уже существующий на стеке класс

а при динамическом создании объекта выглядело по другому (через new)