System.Assigned
Delphi
function Assigned(var P): Boolean;
Propriétés
Type | Visibilité | Source | Unité | Parent |
---|---|---|---|---|
function | public | System.pas | System | System |
Description
Teste un pointeur nil (non assigné) ou une variable procédurale.
Utilisez Assigned pour déterminer si le pointeur ou la procédure référencé par P a la valeur nil. P doit être une référence variable d'un pointeur ou d'un type procédural.
Assigned(P) correspond au test P <> nil dans le cas d'une variable pointeur et à @P <> nil dans le cas d'une variable procédurale.
Assigned renvoie False si la valeur nil est attribuée à P
, et True dans le cas contraire.
Conseil : Lors du test de l'assignation des procédures et des événements d'objets, vous ne pouvez pas tester nil, et l'utilisation de Assigned est la meilleure façon de procéder.
var
LNotifyEvent: TNotifyEvent;
begin
if LNotifyEvent <> nil then { This is not OK and generates compiler error. }
Writeln('something');
if Assigned(LNotifyEvent) then { This is OK. }
Writeln('something');
end;
Conseil : Dans certains cas, il existe une différence entre l'utilisation de Assigned(Something) et Something <> nil. Par exemple, dans le code suivant Assigned(LMyFunction) vérifie si la variable
LMyFunction
est réellement assignée, alors que LMyFunction<> nil teste l'assignation de la valeur de résultat de LMyFunction.
function MyFunction: Pointer;
begin
Result := nil;
end;
type
TMyFunction = function: Pointer;
var
LMyFunction: TMyFunction = MyFunction;
begin
Writeln('Statement "LMyFunction <> nil" evaluates to: ', LMyFunction <> nil);
Writeln('Statement "Assigned(LMyFunction)" evaluates to: ', Assigned(LMyFunction));
end.
Sortie :
Statement "LMyFunction <> nil" evaluates to: FALSE Statement "Assigned(LMyFunction)" evaluates to: TRUE
Remarque : Assigned ne peut pas détecter un pointeur devenu incorrect, autrement dit différent de nil et ne pointant plus sur des données valides. Par exemple, dans l'exemple de code relatif à Assigned (SystemAssigned), Assigned ne détecte pas que P n'est pas valide.