Einzelnen Beitrag anzeigen

Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#9

Re: Dieses Delphi-Event in C#?

  Alt 7. Aug 2006, 13:11
Ein klein wenig Offtopic: So einen Multicast kann man sich in Delphi recht easy nachbauen:

Delphi-Quellcode:
private
      m_events: array of TNotifyEvent;
public
      procedure RegisterEvent(event: TNotifyEvent);
      procedure UnregisterEvent(Subscriber: TObject);

...

////////////////////////////////////////////////////////////////////////////////
// register event to distributor
////////////////////////////////////////////////////////////////////////////////

procedure TFrmEventTest.RegisterEvent(Event: TNotifyEvent);
begin
   SetLength( m_events, Length(m_events) + 1 );
   m_events[ Length(m_events) - 1 ] := Event;
end;

////////////////////////////////////////////////////////////////////////////////
// unregister event from distributor
////////////////////////////////////////////////////////////////////////////////

procedure TFrmEventTest.UnregisterEvent(Subscriber: TObject);
var
   i: integer;
begin
   for i := 0 to Length(m_events) - 1 do
   begin
      if TMethod(m_events[i]).Data = Subscriber then
      begin
         m_events[i] := m_events[Length(m_events) - 1];
         SetLength(m_events, Length(m_events) - 1);
      end;
   end;
end;


////////////////////////////////////////////////////////////////////////////////
// distribute the event
////////////////////////////////////////////////////////////////////////////////

procedure TFrmEventTest.btnEventClick(Sender: TObject);
var
   i: integer;
begin
   for i := 0 to Length(m_events) - 1 do
      m_events[i](Sender);
end;
Man beachte dass ein Objekt mehrere Events registrieren kann und dann auch mehrfach benachrichtigt wird. Ein unregister hebt nur die erste Registrierung wieder auf, die anderen bleiben unberührt.

Im Anhang ein kleines D5-Beispiel was ich vor ein paar Jahren mal gebastelt hab (170 KB).
Angehängte Dateien
Dateityp: zip event_distributor_107.zip (169,3 KB, 9x aufgerufen)
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat