Сообщение Re[5]: А что если убрать new в C# ? от 29.08.2023 12:57
Изменено 29.08.2023 13:05 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
выглядело это так при создании на стеке
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
выглядело это так при создании на стеке
А в динамической памяти так
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.
А в динамической памяти так
var
s: ^TMyClass;
begin
New(s,Init);
Dispose(s,Done);
end.