powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / class constructor: Undeclared identifier: 'Self'
19 сообщений из 19, страница 1 из 1
class constructor: Undeclared identifier: 'Self'
    #39643984
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
type
  TMyClass = class
  public
    class constructor Create;
  end;

procedure Process(AClass: TClass);
begin

end;

class constructor TMyClass.Create;
begin
  Process(Self);
end;



Что я делаю не так?
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39643987
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU> Что я делаю не так?

Либо не к месту пытаешься юзать Self, либо не к месту пытаешься впихнуть
class constructor вместо обычного, не понимая его суть, для чего он и отличия.
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39643988
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

В классовых конструкторах нет инстанса. То есть селфа. Собственно - в том и разница с обычными:

https://stackoverflow.com/questions/39471864/delphi-constructor-and-class-constructor

A class constructor executes exactly once, when the unit in which it is declared is initialized. A class constructor is a static class method, and so Self is not defined.
A constructor executes when explicitly called and has the job of initializing an instance of a class.
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39643990
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon> https://stackoverflow.com/questions/39471864/delphi-constructor-and-class-constructor

Это не совсем корректная ссылка (в т.ч. по тексту), оф.дока лучше:
http://docwiki.embarcadero.com/RADStudio/Seattle/en/Methods#Class_Constructors
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39643992
чё???
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
program console;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;


type
  PMyClass = ^TMyClass;

  TMyClass = class
  class var
    str1: string;

  public

    class constructor Create;

  end;

procedure Process(AClass: TMyClass);
begin
  Writeln(AClass.str1);
end;

class constructor TMyClass.Create;
begin
  str1 := 'tyjy';

  Process(TMyClass(NativeInt(TMyClass)));
end;

var
  t: TMyClass;

begin
  try
    t := TMyClass.Create;
    Writeln(t.ToString);
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;

end.

...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39643993
Чё???
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
Process(nil);



так тоже работает. они же в памяти класса эти переменные. статически
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644033
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUЧто я делаю не так?Это розыгрыш?
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644073
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
self - указатель на экземпляр. Классовые методы - методы работающие без создания экземпляра.
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644077
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Век живи, век учись
Я думал class var/class property/class constructor - вещи, которые характерны как для самого класса, так и для его потомков. На каждый класс своя копия переменных
Оказывается, всё это статические вещи и находятся только в том классе, где объявлены :(

Всем спасибо
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644312
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

Общие поля/методы для экземпляров - это обычные. Общие методы/поля для всего класса - это классовые. Обращаться из экземпляров можно к любым. Но в классовых методах и полях нет экземпляров. Иначе они были бы не классовыми а обычными. Вроде же всё прозрачно?
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644353
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrself - указатель на экземпляр. Классовые методы - методы работающие без создания экземпляра.
Не совсем так. В классовых методах Self - указатель на класс. Т.е. такой код рабочий:
Код: pascal
1.
2.
3.
4.
5.
...
class function TSomeClass.NewClassInstance: TSomeClass;
begin
  Result := Self.Create; // код только для примера.
end;



Видимо, классовые конструкторы в этом плане тоже особенные.
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644377
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В справке же все расписано
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Methods_(Delphi)#Class_Constructors

По сути это замена глобального initialization, на более конкретные для класса.
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644418
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpВ классовых методах Self - указатель на классalekcvpНе совсем так.alekcvpТ.е. такой код рабочий:
А такой нерабочий
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
type
  TSomeClass = class
    class function NewClassInstance: TSomeClass;  static;
  end;

class function TSomeClass.NewClassInstance: TSomeClass;
begin
  Result := Self.Create; // код только для примера.
end;
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644420
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteПо сути это замена глобального initialization, на более конкретные для класса.По сути это вызов инициализации только тогда, когда линкер линкует конкретный класс, а не при любом упоминании модуля в uses
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644494
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_А такой нерабочий
[/src]
И при чём тут это. Речь была о том, что Self - не всегда указатель на инстанс и в классовых методах он тоже присутствует. При чем тут static методы?
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644502
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpПри чем тут static методы?При том, что это тоже классовые методы
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644518
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_alekcvpПри чем тут static методы?При том, что это тоже классовые методы
По-факту это просто отдельные процедуры, приписанные к классу для удобства, так как ничего именно "классового" в них нет.
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644603
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
class constructor: Undeclared identifier: 'Self'
    #39644604
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторclass static methods have no Self parameter at all
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / class constructor: Undeclared identifier: 'Self'
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]