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

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

Классы!


Страницы:   1 2

WondeRu ©   (2004-08-12 12:42:00) 

Здравствуйте!
Чем отличается следующий код? и где, что лучше применять?
1.
(Sender as TPanel).Handle


2.
 TPanel(Sender).Handle


Код Делфа генерит разный!!!

Заранее спасибо!


Anatoly Podgoretsky   (2004-08-12 16:49:00) [1]

_student   (12.08.04 16:08) [19]
Бредятина у тебя ты явно попросил компидятор не беспокоиться насчет проверки, что TButton это TButton


s999   (2004-08-12 16:39:00) [2]


> если объявлен как  class procedure


Совсем не обязательно. Например:

 TMyObject = class(TObject)
 public
   Str: string;
   procedure Proc1;
   procedure Proc2;
 end;

procedure TMyObject.Proc1;
begin
 ShowMessage('Ляля');
end;

procedure TMyObject.Proc2;
begin
 ShowMessage(Str);
end;

А теперь:

 TMyObject(nil).Proc1;
 TMyObject(nil).Proc2;

Первый вызов работает, второй нет. Первому просто ничего от объекта не надо.


KSergey   (2004-08-12 16:36:00) [3]

Обещанные ссылки:

Увы, та ветка уже в архиве, кому интересно можно взять тут (спасибо клиенту форума!)
FTP://217.70.127.139/incoming/Forum/1.html

так же не плохая была
http://delphimaster.ru/cgi-bin/forum.pl?id=1091522317&n=3


WondeRu   (2004-08-12 16:26:00) [4]

>s999   (12.08.04 16:20) [22]
>А вообще, нормально отработают методы, которым конкретный  экземпляр класса "по барабану".

если объявлен как  class procedure, то м.б.! или я не прав?

2ALS ©   (12.08.04 16:05) [18]
интерфейсы только через ass должны браться ;-)


WondeRu   (2004-08-12 16:21:00) [5]

>_student   (12.08.04 16:08) [19]
хороший код - хорошо работает! мне понравилось! ;-)


s999   (2004-08-12 16:20:00) [6]


> Боюсь фокусы с ShowMessage(TLabel(nil).Caption - частный
> случай


Конечно.


> Боюсь фокусы с ShowMessage(TLabel(nil).Caption - частный
> случай, т.к в конце концов ShowMessage отрисовывается DrawText,
> в которую передается не строка, а указатель на нее (PChar)
> в данном случае nil!


Не совсем так, просто у TControl метод GetText любопытно реализован.

А вообще, нормально отработают методы, которым конкретный  экземпляр класса "по барабану".


KSergey   (2004-08-12 16:15:00) [7]

> [20] WondeRu ©   (12.08.04 16:09)
> Боюсь фокусы с ShowMessage(TLabel(nil).Caption - частный
> случай, т.к в конце концов ShowMessage отрисовывается DrawText,
> в которую передается не строка, а указатель на нее (PChar)
> в данном случае nil!

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

> [19] _student   (12.08.04 16:08)
> p:=Label1;
>   if  TButton(p) is TButton  then
>     ShowMessage('sdfg')
>    else
>     ShowMessage('11111');
>
> Выдает что p TButton. Да, это все надуманная бредятина.

В упомянуой мной ветке это подробнейше обсуждалось.
Было в потрепаться.
сейчас попробую поискать


WondeRu   (2004-08-12 16:09:00) [8]

2s999   (12.08.04 15:54) [17]
а такой код

TLabel(nil).Canvas.Lock;

????

Боюсь фокусы с ShowMessage(TLabel(nil).Caption - частный случай, т.к в конце концов ShowMessage отрисовывается DrawText, в которую передается не строка, а указатель на нее (PChar) в данном случае nil!


_student   (2004-08-12 16:08:00) [9]

p:=Label1;
  if  TButton(p) is TButton  then
    ShowMessage('sdfg')
   else
    ShowMessage('11111');


Выдает что p TButton. Да, это все надуманная бредятина.


ALS   (2004-08-12 16:05:00) [10]

Похоже, разница не только в выполнении проверки и исключительной ситуации.
При работе с интерфейсами TSomeType(Var) почему-то не всегда срабатывает :(


s999   (2004-08-12 15:54:00) [11]


> а если p=nil , будет ли работать код  TObject(p) ?


Вполне. Порой даже без ошибок, например:

ShowMessage(TLabel(nil).Caption);


Anatoly Podgoretsky   (2004-08-12 15:53:00) [12]

Приведение типа не делает никакого предположения об содержимом переменной


WondeRu   (2004-08-12 15:46:00) [13]

[14]
а если p=nil , будет ли работать код  TObject(p) ?


_student   (2004-08-12 15:40:00) [14]

Не спорю

if TObject(p) is TButton then
    ShowMessage('sdfg')
   else
    ShowMessage('11111');


WondeRu   (2004-08-12 15:26:00) [15]

2 _student  
is работает только с потомками TObject!!!

Если Sender - указатель, то работает только 2-й вариант(((


GrayFace   (2004-08-12 15:26:00) [16]

KSergey ©   (12.08.04 13:17) [4]
> Да и недавно отгремела огромная вполне любопытная
> ветка по is.

Можно ссылку или название?


_student   (2004-08-12 15:11:00) [17]

is не помогает?


WondeRu   (2004-08-12 15:03:00) [18]

Ну да, а если Sender объявлен как Pointer?


Anatoly Podgoretsky   (2004-08-12 14:01:00) [19]

Все зависит от того, хочешь ли ты катастрофическое окончание или можно отделаться исключением.


WondeRu   (2004-08-12 13:38:00) [20]

Вроде разъяснилось! Спасибо!


Страницы:   1 2

Наверх

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