using System; using System.Collections.Generic; namespace Umbraco.Cms.Core.Events { /// /// Represent event data, for events that support cancellation, and expose an impacted object. /// /// The type of the exposed, impacted object. public class CancellableObjectEventArgs : CancellableObjectEventArgs, IEquatable> { public CancellableObjectEventArgs(TEventObject? eventObject, bool canCancel, EventMessages messages, IDictionary additionalData) : base(eventObject, canCancel, messages, additionalData) { } public CancellableObjectEventArgs(TEventObject? eventObject, bool canCancel, EventMessages eventMessages) : base(eventObject, canCancel, eventMessages) { } public CancellableObjectEventArgs(TEventObject? eventObject, EventMessages eventMessages) : base(eventObject, eventMessages) { } public CancellableObjectEventArgs(TEventObject? eventObject, bool canCancel) : base(eventObject, canCancel) { } public CancellableObjectEventArgs(TEventObject? eventObject) : base(eventObject) { } /// /// Gets or sets the impacted object. /// /// /// This is protected so that inheritors can expose it with their own name /// protected new TEventObject? EventObject { get => (TEventObject?) base.EventObject; set => base.EventObject = value; } public bool Equals(CancellableObjectEventArgs? other) { if (other is null) return false; if (ReferenceEquals(this, other)) return true; return base.Equals(other) && EqualityComparer.Default.Equals(EventObject, other.EventObject); } public override bool Equals(object? obj) { if (obj is null) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != this.GetType()) return false; return Equals((CancellableObjectEventArgs)obj); } public override int GetHashCode() { unchecked { if (EventObject is not null) { return (base.GetHashCode() * 397) ^ EqualityComparer.Default.GetHashCode(EventObject); } return base.GetHashCode() * 397; } } public static bool operator ==(CancellableObjectEventArgs left, CancellableObjectEventArgs right) { return Equals(left, right); } public static bool operator !=(CancellableObjectEventArgs left, CancellableObjectEventArgs right) { return !Equals(left, right); } } }