Инструменты пользователя

Инструменты сайта


remobject_pascal_script:klassy

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
remobject_pascal_script:klassy [2018/04/02 10:59]
jurist23rus [14. Классы]
remobject_pascal_script:klassy [2018/04/23 09:12] (текущий)
7bit Форматирование кода
Строка 6: Строка 6:
 <code delphi> <code delphi>
 var var
- SL: TStringList;​+  ​SL: TStringList;​
 begin begin
- // До создания объекта переменная SL = nil. +  ​// До создания объекта переменная SL = nil. 
- SL := TStringList.Create;​ +  SL := TStringList.Create;​ 
- ​SL.Delimiter := ‘ ’+  SL.Delimiter := ' '
- ​SL.DelimitedText := Один Два Три Четыре Пять+  SL.DelimitedText := 'Один Два Три Четыре Пять'
- ​Debug(SL.Count);​ +  Debug(SL.Count);​ 
- ​SL.SaveToFile(d:\data.txt); +  SL.SaveToFile('d:\data.txt'); 
- ​SL.Free;​ +  SL.Free; 
- // После удаления объекта переменная SL содержит указатель на несуществующий объект. +  // После удаления объекта переменная SL содержит указатель на несуществующий объект. 
- // Попытка обратиться к методу или свойству объекта приведет к ошибке  +  // Попытка обратиться к методу или свойству объекта приведет к ошибке  
- // ​Access violation. Помещаем в переменную нулевой указатель,​ чтобы можно было понять +  // "Access violation". Помещаем в переменную нулевой указатель,​ чтобы можно было понять 
- // существует объект или нет. +  // существует объект или нет. 
- SL := nil;  +  SL := nil;  
- if SL <> nil then … +  if SL <> nil then … 
- else …+  else …
 end; end;
 </​code>​ </​code>​
 Объект создается с помощью конструктора класса. Как правило,​ конструктор имеет название Create. При вызове конструктора происходит выделение памяти для объекта и другие подготовительные действия,​ заданные разработчиком класса. В переменной сохраняется ссылку на объект – адрес участка памяти. До вызова конструктора переменная содержит неопределенный указатель,​ обозначается ключевым словом nil. После создания объекта можно обращаться к его методам и свойствам через точку. Закончив работу с объектом,​ нужно освободить занятую объектом память или, как говорят по-другому,​ уничтожить объект. Делается это методом Free.  Объект создается с помощью конструктора класса. Как правило,​ конструктор имеет название Create. При вызове конструктора происходит выделение памяти для объекта и другие подготовительные действия,​ заданные разработчиком класса. В переменной сохраняется ссылку на объект – адрес участка памяти. До вызова конструктора переменная содержит неопределенный указатель,​ обозначается ключевым словом nil. После создания объекта можно обращаться к его методам и свойствам через точку. Закончив работу с объектом,​ нужно освободить занятую объектом память или, как говорят по-другому,​ уничтожить объект. Делается это методом Free. 
  
-Стоит обратить внимание,​ что при уничтожении объекта переменная по-прежнему содержит ссылку,​ но уже на несуществующий объект. Попытка обратиться к методу или свойству несуществующего объекта приведет к ошибке ​Access violation. <WRAP center round tip 80%>+Стоит обратить внимание,​ что при уничтожении объекта переменная по-прежнему содержит ссылку,​ но уже на несуществующий объект. Попытка обратиться к методу или свойству несуществующего объекта приведет к ошибке ​"Access violation". <WRAP center round tip 80%>
 Присваивайте переменной класса значение nil, чтобы можно было понять существует объект или нет. Присваивайте переменной класса значение nil, чтобы можно было понять существует объект или нет.
 </​WRAP>​ </​WRAP>​
Строка 39: Строка 39:
 Наследование позволяет создать новый класс на основе существующего класса. Новый класс называют потомком,​ а наследуемый класс – базовым классом,​ предком,​ родительским. Новый класс может расширять функционал базового класса и переопределять существующий функционал. Создаются целые иерархии классов,​ где базовые классы обладают некоторыми методами и свойствами,​ которые общие для всех потомков. Взять, к примеру,​ классы LCL. Элементы графического интерфейса представлены такими классами,​ как TEdit – поле для ввода текста,​ TLabel - метка, TButton – кнопка. Каждый из них имеет специфические свойства и методы. Но все они, по сути, являются элементами управления,​ которые имеют положение,​ размер,​ цвет и т. д. И чтобы не повторять для каждого класса одни и те же свойства,​ а также задать общее для всех поведение,​ они наследуют общие свойства и методы от базового класса TControl. Наследование позволяет создать новый класс на основе существующего класса. Новый класс называют потомком,​ а наследуемый класс – базовым классом,​ предком,​ родительским. Новый класс может расширять функционал базового класса и переопределять существующий функционал. Создаются целые иерархии классов,​ где базовые классы обладают некоторыми методами и свойствами,​ которые общие для всех потомков. Взять, к примеру,​ классы LCL. Элементы графического интерфейса представлены такими классами,​ как TEdit – поле для ввода текста,​ TLabel - метка, TButton – кнопка. Каждый из них имеет специфические свойства и методы. Но все они, по сути, являются элементами управления,​ которые имеют положение,​ размер,​ цвет и т. д. И чтобы не повторять для каждого класса одни и те же свойства,​ а также задать общее для всех поведение,​ они наследуют общие свойства и методы от базового класса TControl.
  
-Полиморфизм – это когда базовый объект ​«знает», метод какого потомка надо вызвать.+Полиморфизм – это когда базовый объект ​"знает", метод какого потомка надо вызвать.
  
 <code delphi> <code delphi>
 procedure RepaintAllControls(Container:​ TWinControl);​ procedure RepaintAllControls(Container:​ TWinControl);​
 var var
- i: Integer; +  ​i: Integer; 
- C: TControl;+  C: TControl;
 begin begin
- for i := 0 to Container.ControlCount – 1 do +  ​for i := 0 to Container.ControlCount – 1 do 
- ​begin +  begin 
-  C := Container.Controls[i];​ +    C := Container.Controls[i];​ 
-  C.Repaint;​ //​ Перерисовываем компонент +    C.Repaint;​ //​ Перерисовываем компонент 
- end;+  end;
 end; end;
 </​code>​ </​code>​
Строка 62: Строка 62:
 <code delphi> <code delphi>
 var var
- SL: TStrings;+  ​SL: TStrings;
 begin begin
- SL := TStringList.Create;​ +  ​SL := TStringList.Create;​ 
- …+  
 end; end;
 </​code>​ </​code>​
Строка 75: Строка 75:
 </​code>​ </​code>​
  
-Если переменная содержит ссылку на несуществующий объект,​ то появится ошибка ​cannot cast an object. Если переменная содержит nil, то появиться ошибка ​null pointer exception” или ​could not call proc. Если результат преобразования сохранить в другой переменной,​ то в случае с nil ошибки не будет, другая переменная тоже будет содержать nil:+Если переменная содержит ссылку на несуществующий объект,​ то появится ошибка ​"cannot cast an object". Если переменная содержит nil, то появиться ошибка ​"null pointer exception" ​или ​"could not call proc". Если результат преобразования сохранить в другой переменной,​ то в случае с nil ошибки не будет, другая переменная тоже будет содержать nil:
 <code delphi> <code delphi>
 var var
- SL: TStrings; +  ​SL: TStrings; 
- SL2: TStringList;​+  SL2: TStringList;​
 begin begin
- SL2 := TStringList(SL);​ //​ Ошибки не будет. SL2 будет равно nil.+  ​SL2 := TStringList(SL);​ //​ Ошибки не будет. SL2 будет равно nil.
 end; end;
 </​code>​ </​code>​
Строка 89: Строка 89:
 procedure FieldChange(Sender,​ Control: TObject; const FieldName: String); procedure FieldChange(Sender,​ Control: TObject; const FieldName: String);
 begin begin
- if Control is TdxEdit then +  ​if Control is TdxEdit then 
- ​begin +  begin 
-  if TdxEdit(Control).ValidateText then … +    if TdxEdit(Control).ValidateText then … 
- end +   ​end 
- else if Control is TCustomDBEditButton then …+   ​else if Control is TCustomDBEditButton then …
 end; end;
 </​code>​ </​code>​
Строка 100: Строка 100:
 <code delphi> <code delphi>
 var var
- SL: TStringList;​+  ​SL: TStringList;​
 begin begin
- SL := TStringList.Create;​ +  ​SL := TStringList.Create;​ 
- with SL do +  with SL do 
- ​begin +  begin 
-  Add(Один); +    Add('Один'); 
-  Add(Два); +    Add('Два'); 
- ​end;​ +   ​end; 
- …+  
 end; end;
 </​code>​ </​code>​
Строка 116: Строка 116:
 with TStringList.Create do with TStringList.Create do
 begin begin
- Add(Один); +  ​Add('Один'); 
- Add(Два); +  Add('Два'); 
- … +  … 
- // Не забываем удалить объект +  // Не забываем удалить объект 
- Free;+  Free;
 end; end;
 </​code>​ </​code>​
remobject_pascal_script/klassy.txt · Последние изменения: 2018/04/23 09:12 — 7bit