Создание своего класса в Delphi 7

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Создание своего класса в Delphi 7

Re: Создание своего класса в Delphi 7

Duncon » 03 дек 2007, 13:06

Игорь Акопян, перегрев полный, последие пол года все свободное время трачу на написание всякой всячины недетской.

Re: Создание своего класса в Delphi 7

Игорь Акопян » 03 дек 2007, 12:09

Duncon, по-моему ты перегрелся ;)
somewhere , я не обсуждал целесообразность приведённого кода, я его комментировал ;)

.

BBB » 29 ноя 2007, 09:52

somewhere писал(а):Duncon, ты прямо подорвал мою веру во все хорошее ))))
Сколько лет считал что класс может быть пустым и можно строить его как угодно, а тут такая подстава. Что интересно, раньше я этого не замечал и вышеприведенный код это только и доказывал, хотя сейчас мне сложно понять как TObject был создан из самого себя. Очень жаль, что все эти детища от него наследованы. Спасибо за объяснение, впредь буду знать...
Может, что-то не шибкоо умное (в той области, что касается именно Delphi) сейчас скажу :)
Насколько я помню, class - это Дельфийская "фича". В обектном Паскале (начиная с версии 5.5, если речь идет о Turbo Pascal) был object. Т.е., в отличие от "необъектной" record, object как раз уже мог иметь в описании не только поля, но и методы.

Собственно, record и object, как я понимаю, допустимо использовать и в Delphi.
А Дельфийский class - это, видимо, еще более "высокая ипостась". Собственно, кое-что об этом написал Duncon.

Re: Создание своего класса в Delphi 7

Duncon » 29 ноя 2007, 09:33

Типа книжки почитай, там обычно большими буквами об этом пишут.
данная запись TmyClass = class равнозначна TmyClass = class(TObject) просто его можно опускать в объявлении родителя.

Re: Создание своего класса в Delphi 7

somewhere » 29 ноя 2007, 08:55

Duncon, ты прямо подорвал мою веру во все хорошее ))))
Сколько лет считал что класс может быть пустым и можно строить его как угодно, а тут такая подстава. Что интересно, раньше я этого не замечал и вышеприведенный код это только и доказывал, хотя сейчас мне сложно понять как TObject был создан из самого себя. Очень жаль, что все эти детища от него наследованы. Спасибо за объяснение, впредь буду знать...

Re: Создание своего класса в Delphi 7

Duncon » 28 ноя 2007, 16:44

somewhere а зачем мне показывать класс TObject который по умолчанию является родителем всего..
Твоя запись дословно означает
TObject = class
Создаю новый класс TObject унаследованный от TObject, видимо пространство имен это позволяет.

Re: Создание своего класса в Delphi 7

somewhere » 28 ноя 2007, 16:29

TObject не есть низ классовой структуры, вот например как он описан:

Код: Выделить всё

TObject = class
    constructor Create;
    procedure Free;
    class function InitInstance(Instance: Pointer): TObject;
    procedure CleanupInstance;
    function ClassType: TClass;
    class function ClassName: ShortString;
    class function ClassNameIs(const Name: string): Boolean;
    class function ClassParent: TClass;
    class function ClassInfo: Pointer;
    class function InstanceSize: Longint;
    class function InheritsFrom(AClass: TClass): Boolean;
    class function MethodAddress(const Name: ShortString): Pointer;
    class function MethodName(Address: Pointer): ShortString;
    function FieldAddress(const Name: ShortString): Pointer;
    function GetInterface(const IID: TGUID; out Obj): Boolean;
    class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry;
    class function GetInterfaceTable: PInterfaceTable;
    function SafeCallException(ExceptObject: TObject;
      ExceptAddr: Pointer): HResult; virtual;
    procedure AfterConstruction; virtual;
    procedure BeforeDestruction; virtual;
    procedure Dispatch(var Message); virtual;
    procedure DefaultHandler(var Message); virtual;
    class function NewInstance: TObject; virtual;
    procedure FreeInstance; virtual;
    destructor Destroy; virtual;
  end;
...
...
class function TObject.ClassParent: TClass;
{$IFDEF PUREPASCAL}
begin
  Pointer(Result) := PPointer(Integer(Self) + vmtParent)^;
  if Result <> nil then
    Pointer(Result) := PPointer(Result)^;
end;
{$ELSE}
asm
        MOV     EAX,[EAX].vmtParent
        TEST    EAX,EAX
        JE      @@exit
        MOV     EAX,[EAX]
@@exit:
end;
{$ENDIF}

class function TObject.NewInstance: TObject;
begin
  Result := InitInstance(_GetMem(InstanceSize));
end;

procedure TObject.FreeInstance;
begin
  CleanupInstance;
  _FreeMem(Self);
end;
...
...
...
ну и так далее...

Re: Создание своего класса в Delphi 7

Duncon » 28 ноя 2007, 15:28

somewhere очень интересно посмотреть на твой класс с нуля.

Re: Создание своего класса в Delphi 7

somewhere » 28 ноя 2007, 14:50

&quot писал(а):Конструктор класса унаследованного от TObject должен быть как минимум перекрытым (override),называться Create и иметь сходный набор параметров. Первой строкой в нём должен быть вызов родительского конструктора с помощью инструкции Inherited
Да зачем надо от TObject наследоваться, его методы и свойства никак в задаче жизнь не облегчат. Надо класс с нуля начинать.

Re: Создание своего класса в Delphi 7

Игорь Акопян » 28 ноя 2007, 14:12

ну если про класс...
Конструктор класса унаследованного от TObject должен быть как минимум перекрытым (override),называться Create и иметь сходный набор параметров. Первой строкой в нём должен быть вызов родительского конструктора с помощью инструкции Inherited

Вернуться к началу