// override object.Equals
        public override bool Equals(object obj)
        {
            //
            // See the full list of guidelines at
            //   http://go.microsoft.com/fwlink/?LinkID=85237
            // and also the guidance for operator== at
            //   http://go.microsoft.com/fwlink/?LinkId=85238
            //

            if (obj == null || GetType() != obj.GetType())
            {
                if (obj is XShape)
                {
                    return(OoUtils.AreOoObjectsEqual(Shape, obj));
                }
                return(false);
            }

            if (base.Equals(obj))
            {
                return(true);
            }

            try
            {
                return(OoUtils.AreOoObjectsEqual(Shape, ((OoShapeObserver)obj).Shape));
            }
            catch
            {
                return(false);
            }
        }