File: Core\CSharp\System\Windows\RouteItem.cs
Project: wpf\src\PresentationCore.csproj (PresentationCore)
using System;
 
namespace System.Windows
{
    // An item in the EventRoute
    //
    // RouteItem constitutes
    // the target object and
    // list of RoutedEventHandlerInfo that need 
    // to be invoked upon the target object
    internal struct RouteItem
    {
        #region Construction
 
        // Constructor for RouteItem
        internal RouteItem(object target, RoutedEventHandlerInfo routedEventHandlerInfo)
        {
            _target = target;
            _routedEventHandlerInfo = routedEventHandlerInfo;
        }
 
        #endregion Construction
        
        #region Operations
 
        // Returns target
        internal object Target
        {
            get {return _target;}
        }
        
        // Invokes the associated RoutedEventHandler
        // on the target object with the given 
        // RoutedEventArgs
        internal void InvokeHandler(RoutedEventArgs routedEventArgs)
        {
            _routedEventHandlerInfo.InvokeHandler(_target, routedEventArgs);
        }
 
        /*
        Commented out to avoid "uncalled private code" fxcop violation
 
        /// <summary>
        ///     Cleanup all the references within the data
        /// </summary>
        internal void Clear()
        {
            _target = null;
            _routedEventHandlerInfo.Clear();
        }
        */
 
        /// <summary>
        ///     Is the given object equals the current
        /// </summary>
        public override bool Equals(object o)
        {
            return Equals((RouteItem)o);
        }
 
        /// <summary>
        ///     Is the given RouteItem equals the current
        /// </summary>
        public bool Equals(RouteItem routeItem)
        {
            return (
                routeItem._target == this._target &&
                routeItem._routedEventHandlerInfo == this._routedEventHandlerInfo);
        }
 
        /// <summary>
        ///     Serves as a hash function for a particular type, suitable for use in 
        ///     hashing algorithms and data structures like a hash table
        /// </summary>
        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
 
        /// <summary>
        ///     Equals operator overload
        /// </summary>
        public static bool operator== (RouteItem routeItem1, RouteItem routeItem2)
        {
            return routeItem1.Equals(routeItem2);
        }
 
        /// <summary>
        ///     NotEquals operator overload
        /// </summary>
        public static bool operator!= (RouteItem routeItem1, RouteItem routeItem2)
        {
            return !routeItem1.Equals(routeItem2);
        }
        
        #endregion Operations
 
        #region Data
 
        private object _target;
        private RoutedEventHandlerInfo _routedEventHandlerInfo;
        
        #endregion Data
    }
}