Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2012, 19:40   #1
Upgrades
Пользователь
 
Аватар для Upgrades
 
Регистрация: 19.07.2010
Сообщений: 21
Вопрос Как правильнее Assigned(FOnClick) или Assigned(OnClick)

Встречал часто в исходниках проверку внутреннего поля типа указателя на метод Assigned(FOnClick) и начал встречать, обращать внимание, что в некоторых исходниках пишут проверку свойства Assigned(OnClick), так что правильнее или оба варианта правильные?
Upgrades вне форума Ответить с цитированием
Старый 17.04.2012, 19:52   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

внутри себя проверяете обращайсь к полю, считаю так правильнее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.04.2012, 20:13   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Когда-то столкнулся с таким шедевром:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses  classes,
  SysUtils;
type
 c=class
  private
    Fp: Pointer;
    procedure Setp(const Value: Pointer);
    function  aFp:Pointer;
    function IfAssigned:String;
  public
   property p:Pointer read aFp write Setp;
 end;

{ c }

function c.aFp;begin Result:=nil;end;

function c.IfAssigned: String;
begin Result:='';
 if Assigned(Fp) then Result:=Result+'Variable Fp is ok' else Result:=Result+'Variable Fp is not good';
 Result:=Result+#13#10;
 if Assigned(p) then Result:=Result+'Property P is ok' else Result:=Result+'Property P is not good';
end;

procedure c.Setp(const Value: Pointer);
begin
  Fp := Value;
end;

var cl:c;
begin
 cl:=c.Create;
 cl.p:=cl;
 write(cl.IfAssigned);
 cl.Free;
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Код иллюстрирует уязвимость, когда свойство имеет обработчик. И если этот обработчик написан безграмотно конечно может быть беда - он может вернуть все что угодно но только не то что нужно.
Вообще конечно Assigned чаще всего применяется к проверке обработчиков событий, но кто знает что может автор программы напихать в нее, совсем позабыв о элементарных вещах.
Я тоже думаю что внутреннюю переменную будет проверять политкорректнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Left side cannot be assigned to в Record Человек_Борща Общие вопросы Delphi 13 25.09.2011 19:11
Left side cannot be assigned to... _-Re@l-_ Общие вопросы Delphi 2 24.03.2011 15:07
OnClick - правая или левая кнопка мыши Vadim_S Общие вопросы Delphi 8 16.09.2009 18:15
assigned(some) sunnmas Общие вопросы Delphi 3 05.08.2009 15:26
Ошибка Left Side cannot be assigned to.. DM_bite Помощь студентам 1 18.09.2008 21:01