Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / class constructor: Undeclared identifier: 'Self' / 19 сообщений из 19, страница 1 из 1
13.05.2018, 19:32
    #39643984
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
Код: 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
13.05.2018, 19:41
    #39643987
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
SOFT FOR YOU> Что я делаю не так?

Либо не к месту пытаешься юзать Self, либо не к месту пытаешься впихнуть
class constructor вместо обычного, не понимая его суть, для чего он и отличия.
...
Рейтинг: 0 / 0
13.05.2018, 19:43
    #39643988
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
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
13.05.2018, 19:50
    #39643990
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
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
13.05.2018, 20:08
    #39643992
чё???
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
Код: 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
13.05.2018, 20:12
    #39643993
Чё???
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
Код: pascal
1.
Process(nil);



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

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

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



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

По сути это замена глобального initialization, на более конкретные для класса.
...
Рейтинг: 0 / 0
14.05.2018, 14:10
    #39644418
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
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
14.05.2018, 14:12
    #39644420
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
X-CiteПо сути это замена глобального initialization, на более конкретные для класса.По сути это вызов инициализации только тогда, когда линкер линкует конкретный класс, а не при любом упоминании модуля в uses
...
Рейтинг: 0 / 0
14.05.2018, 15:30
    #39644494
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
_Vasilisk_А такой нерабочий
[/src]
И при чём тут это. Речь была о том, что Self - не всегда указатель на инстанс и в классовых методах он тоже присутствует. При чем тут static методы?
...
Рейтинг: 0 / 0
14.05.2018, 15:42
    #39644502
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
alekcvpПри чем тут static методы?При том, что это тоже классовые методы
...
Рейтинг: 0 / 0
14.05.2018, 16:19
    #39644518
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
_Vasilisk_alekcvpПри чем тут static методы?При том, что это тоже классовые методы
По-факту это просто отдельные процедуры, приписанные к классу для удобства, так как ничего именно "классового" в них нет.
...
Рейтинг: 0 / 0
14.05.2018, 18:23
    #39644603
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
...
Рейтинг: 0 / 0
14.05.2018, 18:24
    #39644604
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
class constructor: Undeclared identifier: 'Self'
авторclass static methods have no Self parameter at all
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / class constructor: Undeclared identifier: 'Self' / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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