Utilizar eventos cuando sea apropiado
Actualización: noviembre 2007
Nombre de tipo |
UseEventsWhereAppropriate |
Identificador de comprobación |
CA1030 |
Categoría |
Microsoft.Design |
Cambio problemático |
No problemático |
Motivo
Un nombre de método público, protegido o privado comienza con una de las siguientes palabras:
AddOn
RemoveOn
Fire
Raise
Descripción de la regla
Esta regla detecta métodos que tienen nombres que normalmente se utilizarían para eventos. Los eventos siguen el patrón de diseño publicación-suscripción u observador; se utilizan cuando se debe comunicar un cambio de estado a otros objetos. Si se llama a un método en respuesta a un cambio de estado claramente definido, un controlador de eventos debe invocar al método. Los objetos que llaman al método deben provocar eventos en lugar de llamar directamente al método.
Se pueden encontrar algunos de los ejemplos habituales de eventos en las aplicaciones de interfaz de usuario, donde una acción del usuario como hacer clic en un botón provoca la ejecución de un segmento de código. El modelo de evento de .NET Framework no se limita a las interfaces de usuario; deben utilizarse donde deba comunicarse un cambio de estado de uno o más objetos.
Cómo corregir infracciones
Si se llama al método cuando el cambia estado de un objeto, debería tener en cuenta el cambio en el diseño para utilizar el modelo de evento de .NET Framework.
Cuándo suprimir advertencias
Suprima una advertencia de esta regla si el método no funciona con el modelo de evento de .NET Framework.
Ejemplo
En el ejemplo siguiente se muestra un método que intenta comunicar un cambio de estado (en este caso, que su tipo declarativo, Book, se ha cerrado) invocando un delegado.
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);
}
}
}
La clase siguiente corrige el ejemplo anterior cambiando al modelo de eventos de .NET Framework.