protected bool Equals(ClassWithFieldsReferringToTheSameValue other)
        {
            if (!Equals(B, other.B) && Equals(A, other.A))
                return false;

            return !ReferenceEquals(other.A, other.B) || (ReferenceEquals(other.A, other.B) && ReferenceEquals(A, B));
        }
        protected bool Equals(ClassWithFieldsReferringToTheSameValue other)
        {
            if (!Equals(B, other.B) && Equals(A, other.A))
            {
                return(false);
            }

            return(!ReferenceEquals(other.A, other.B) || (ReferenceEquals(other.A, other.B) && ReferenceEquals(A, B)));
        }