Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

RTTI


Страницы:   1 2

ANTPro ©   (2007-08-30 17:07:00) 

Возможно ли узнать имя экземпляра класса в его конструкторе.


ANTPro   (2007-08-31 17:57:00) [1]

> [37] Юрий Зотов ©   (31.08.07 13:51)

Спасибо.


> [37] Юрий Зотов ©   (31.08.07 13:51)
> 2. Delphi (Object Pascal):
>
> Стив Тейксейра и Ксавье Пачеко. У них несколько книг, по
> разным версиям Delphi, лично мне больше нравится книжка
> по версии 5. Тоже не смотрите, что книжка старая, пользы
> от нее тоже будет ОЧЕНЬ много.

Прочитал первую часть, как-то поверхностно :(


Юрий Зотов   (2007-08-31 13:51:00) [2]

> ANTPro ©   (31.08.07 13:18) [36]

1. Указатели, работа с памятью и все остальное, относящееся к Паскалю:

В.В. Фаронов. Программирование в среде Turbo Pascal 5.0.

За точность названия не ручаюсь, но слова "Turbo Pascal 5.0" в нем точно есть. Не смотрите, что книжка старая, пользы от нее будет ОЧЕНЬ много.

2. Delphi (Object Pascal):

Стив Тейксейра и Ксавье Пачеко. У них несколько книг, по разным версиям Delphi, лично мне больше нравится книжка по версии 5. Тоже не смотрите, что книжка старая, пользы от нее тоже будет ОЧЕНЬ много.

3. Объектная модель Delphi, устройство VCL, основы устройства IDE:

Рэй Конопка. И тоже не смотрите, что книжка старая, лучше нее по ЭТОЙ тематике пока еще никто не написал, ИМХО.


ANTPro   (2007-08-31 13:18:00) [3]

> [35] Юрий Зотов ©   (31.08.07 03:15)

Можете подсказать хорошую книгу?
Во всех что у меня есть описанно, как-то поверхносно, и без примеров :(


Юрий Зотов   (2007-08-31 03:15:00) [4]

> ANTPro ©   (31.08.07 00:13) [34]

@Self - неверно. В который раз уже Вы делаете одну и ту же ошибку. И будете продолжать ее делать, пока не разберетесь с указателями.


ANTPro   (2007-08-31 00:13:00) [5]

> [33] oxffff ©   (30.08.07 23:02)

Да, я понял. Спасибо.

Всетаки придется обойтись IntToHex(Integer(@Self),8), а жаль, хотелось наглядности :(


oxffff   (2007-08-30 23:02:00) [6]


> ANTPro ©   (30.08.07 22:57) [32]
> > [31] Инс ©   (30.08.07 22:18)
>
> Спасибо. Очень интересно.
>
>
> > [31] Инс ©   (30.08.07 22:18)
> > Заодно рекомендую найти ответ на вопрос, чем
> > MyClass.Create
> > олличается от
> > MyClass:=TMyClass.Create;
>
> Важно знать, что при вызове конструктора класса он вызывается
> как конструктор и создает экземпляр, при вызове же конструктора
> у объекта он вызывается как процедура и нового экземпляра
> не создает. © От туда


Привет земляк.

Если хочешь еще больше знать посмотри работу _ClassCreate, обрати внимание на работу с регистром dl в конструкторе.
Лучшее познание Delphi это изучение pas файлов system, Sysinit, TypInfo,variants и конечно отладчик.


ANTPro   (2007-08-30 22:57:00) [7]

> [31] Инс ©   (30.08.07 22:18)

Спасибо. Очень интересно.


> [31] Инс ©   (30.08.07 22:18)
> Заодно рекомендую найти ответ на вопрос, чем
> MyClass.Create
> олличается от
> MyClass:=TMyClass.Create;

Важно знать, что при вызове конструктора класса он вызывается как конструктор и создает экземпляр, при вызове же конструктора у объекта он вызывается как процедура и нового экземпляра не создает. © От туда


Инс   (2007-08-30 22:18:00) [8]


> Я только хотел посмотреть, что будет результатом выполнения
> предложенного кода.

Посмотрели? :) Вот вам ссылочка, чтобы легче было разобраться с тем, что делают методы Create, NewInstance, InitInstance.
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=216

Заодно рекомендую найти ответ на вопрос, чем
MyClass.Create
олличается от
MyClass:=TMyClass.Create;


ANTPro   (2007-08-30 21:59:00) [9]

> [28] Инс ©   (30.08.07 21:13)
Кодом в [20] я хотел спросить, какую строку в конструкторе ты хотел получить, "A" или "B", так как в данном случае и A и B на момент вызова Create будут ссылаться на этот экземпляр.

Да, я понял, посмотрел реализацию InitInstance.


> [28] Инс ©   (30.08.07 21:13)
> А вот что ты написал я не понял. Да еще и не правильно,
> утечка памяти будет.

Я только хотел посмотреть, что будет результатом выполнения предложенного кода.


Юрий Зотов   (2007-08-30 21:35:00) [10]

> ANTPro ©   (30.08.07 20:37) [25]

> Эх, как, много я еще не знаю

Не так уж и много. Вы не знаете, что такое указатели, статическая и динамическая память. Очень советую с этим вопросом разобраться.

Потому что как только Вы это поймете, так тут же поймете и другое - что такое объект и ссылки на него. Включая тот самый загадочный Self.

А заодно поймете и то для обращения к объекту никакие имена и вовсе не нужны.


Инс   (2007-08-30 21:13:00) [11]

Я бы сказал чего не хватает... Сам хоть понял что написал? Кодом в [20] я хотел спросить, какую строку в конструкторе ты хотел получить, "A" или "B", так как в данном случае и A и B на момент вызова Create будут ссылаться на этот экземпляр. А вот что ты написал я не понял. Да еще и не правильно, утечка памяти будет.


ANTPro   (2007-08-30 21:10:00) [12]

> [26] Инс ©   (30.08.07 21:00)

Где-то запятой не хватает?


Инс   (2007-08-30 21:00:00) [13]


> Скомпилял :)


Что это??? :-0


ANTPro   (2007-08-30 20:37:00) [14]

Скомпилял :)

 A:=TMyBaseClass.Create('A');
 A.NewInstance;
 B:=A;
 B.Create('B');


@A<>@B A:=B B:=B
Эх, как, много я еще не знаю :(

Есть более разумные предложения?


ANTPro   (2007-08-30 20:18:00) [15]

> [23] Инс ©   (30.08.07 19:50)

Что если A и B будут унаследованны от TMyBaseClass?
(Делфя упала немогу проверить, но думаю то что мне нужно)
unit Unit2;

interface
{$M+}
type
 TMyBaseClass = class
   constructor Create(SelfName: string);
 private
 protected
   FSelfName: string;
 public
   property SelfName: read FSelfName;
 published
 end;
{$M-}
implementation

constructor TMyBaseClass.Create(SelfName: string);
begin
 FSelfName:=SelfName;
end;

end.


Инс   (2007-08-30 19:50:00) [16]


> Если @A будет равен @B. То будут имена одинаковыми.

Не понял. В данном случае @A <> @B. Значение, содержащееся в A и B одинаковы. Так что же вы бы хотели получить в конструкторе, "A" или "B"? ;)


ANTPro   (2007-08-30 19:44:00) [17]

> [21] Инс ©   (30.08.07 19:28)

Да я в курсе, но мало ли :)


> [17] Ega23 ©   (30.08.07 17:42)

Пример я привел, для дебуга это все. Адрес как-то некузяво выглядит :)

> [16] Reindeer Moss Eater ©   (30.08.07 17:27)

Да, так и думаю сделать.
Добавить поле:
FSelfName:String;
А заполнять в конструкторе.


> [20] Инс ©   (30.08.07 19:03)
> Интересно, если бы это было возможно, то какое "имя" вы
> бы получили в конструкторе в следующем коде:
>
> with TMyClass.Create do ...
>
> или в таком:
>
> A:=TMyClass.NewInstance;
> B:=A;
> B.Create;

Если @A будет равен @B. То будут имена одинаковыми.


Инс   (2007-08-30 19:28:00) [18]


> Я думал что RTTI более функционально :)


RTTI - это информация о типах , а не об идентификаторах


Инс   (2007-08-30 19:03:00) [19]

Интересно, если бы это было возможно, то какое "имя" вы бы получили в конструкторе в следующем коде:

with TMyClass.Create do ...

или в таком:

A:=TMyClass.NewInstance;
B:=A;
B.Create;


TUser   (2007-08-30 18:52:00) [20]

Имхо, автору надо получить имя переменной. Только на самом деле не надо, это только там кажется.

Вот в си можно много присвоений сразу делать. Если в билдере (а там такое же RTTI) написать

VarName1 = VarName2 = TAnyObj.Create;

или как там положено, то что надо будет получить - 'VarName1' или 'VarName2'?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо