Gracias, Marcelo. Mi comprensión del manejo de interfaces no es mala, y está claro lo que dices. Pero rescato este punto:
Cita:
Empezado por Delphius
[...] el método en cuestión da a entender que hacer cuando el Observador solicita ser removido de la lista.
|
Eso mismo pienso, pero como no hay nada de nada (ni código, ni documentación) que asiente cuándo podría o tendría que ser llamado ese método, queda una rendija de duda.
Me parece que la clase TObservers (tipo de la propiedad Observers de TComponent), debería llamar al método IObserver.Removed en su método RemoveObserver (tomando la interfaz IObserver del parámetro AIntf), pero como puede verse no ocurre tal cosa:
Código Delphi
[-]procedure TObservers.RemoveObserver(const IDs: array of Integer; const AIntf: IInterface);
var
LID: Integer;
LList: IInterfaceList;
I: Integer;
begin
for I := 0 to Length(IDs) - 1 do
begin
LID := IDs[i];
if FObservers.TryGetValue(LID, LList) then
begin
LList.Remove(AIntf);
if LList.Count = 0 then
begin
FObservers.Remove(LID);
LList := nil;
end;
end;
end;
end;
Es probable que Embarcadero añada algún cambio después de la línea "
LList.Remove(AIntf);", si es que no lo ha hecho ya, en las siguientes versiones.
Alguien que tenga XE7 instalado, ¿sería tan amable de verificar si el método TObservers.RemoveObserver sigue igual o presenta alguna modificación en su código fuente? El archivo de código es
System.Classes.pas.
Muchas gracias.
Al.