Share via


Nach Möglichkeit Ereignisse verwenden

Aktualisiert: November 2007

     TypeName

UseEventsWhereAppropriate

CheckId

CA1030

Kategorie

Microsoft.Design

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Ein öffentlicher, geschützter oder privater Methodenname beginnt mit einer der folgenden Zeichenfolgen:

  • AddOn

  • RemoveOn

  • Fire

  • Raise

Regelbeschreibung

Diese Regel erkennt Methoden, deren Namen normalerweise für Ereignisse verwendet würden. Ereignisse entsprechen dem Entwurfsmuster Beobachter oder Veröffentlichen-Abonnieren. Sie werden benutzt, wenn andere Objekte über eine Zustandsänderung in einem Objekt informiert werden müssen. Wenn eine Methode auf eine klar definierte Zustandsänderung hin aufgerufen wird, sollte die Methode von einem Ereignishandler aufgerufen werden. Objekte, die die Methode aufrufen, sollten Ereignisse auslösen, statt die Methode direkt aufzurufen.

Einige gängige Beispiele für Ereignisse finden sich in Benutzeroberflächenanwendungen, in denen eine Benutzeraktion, z. B. das Klicken auf eine Schaltfläche, die Ausführung eines bestimmtes Codesegments bewirkt. Das Ereignismodell von .NET Framework ist nicht auf Benutzeroberflächen beschränkt. Es sollte überall dort verwendet werden, wo ein oder mehrere Objekte über Zustandsänderungen informiert werden müssen.

Behandlung von Verstößen

Wenn die Methode aufgerufen wird, sobald sich der Zustand eines Objekts ändert, sollten Sie in Erwägung ziehen, den Entwurf zu ändern und das Ereignismodell von .NET Framework zu verwenden.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie eine Warnung dieser Regel, wenn sich das Ereignismodell von .NET Framework nicht für die Methode eignet.

Beispiel

Im folgenden Beispiel wird eine Methode dargestellt, mit der Zustandsänderungen (in diesem Fall, das der deklarierende Typ Book geschlossen wurde) durch den Aufruf eines Delegaten kommuniziert werden können.

using System;

namespace Samples
{    
    public delegate void ClosedCallback(Book book);

        public class Book    
    {         
        private ClosedCallback _ClosedCallback;

             // Violates this rule
             public void AddOnClosed(ClosedCallback callback)
             {
                  _ClosedCallback = callback;
             }

         public void Close()
         {
              _ClosedCallback(this);
         }
    }
}

Mit der folgenden Klasse wird das obige Beispiel durch eine Änderung des .NET Framework-Ereignismodells korrigiert.